我无法将主要活动 OnCreate 方法中的任务卸载到另一个类来完成繁重的工作。
当我尝试从非 Activity 类调用 getSystemService 时,会引发异常。
任何帮助将不胜感激 :)
lmt.java:
package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.location.Location; public class lmt extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fyl lfyl = new fyl(); Location location = lfyl.getLocation(); String latLongString = lfyl.updateWithNewLocation(location); TextView myLocationText = (TextView)findViewById(R.id.myLocationText); myLocationText.setText("Your current position is:\n" + latLongString); } }
fyl.java
package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; import android.content.Context; public class fyl { public Location getLocation(){ LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); String provider = LocationManager.GPS_PROVIDER; Location location = locationManager.getLastKnownLocation(provider); return location; } public String updateWithNewLocation(Location location) { String latLongString; if (location != null){ double lat = location.getLatitude(); double lng = location.getLongitude(); latLongString = "Lat:" + lat + "\nLong:" + lng; }else{ latLongString = "No Location"; } return latLongString; } }
您需要将您的上下文传递给您的 fyl 类。 一种解决方案是为您的fyl类创建一个这样的构造函数:
fyl
public class fyl { Context mContext; public fyl(Context mContext) { this.mContext = mContext; } public Location getLocation() { -- locationManager = (LocationManager)mContext.getSystemService(context); -- } }
因此,在您的活动类中,在函数中创建 fyl 的对象,onCreate如下所示:
onCreate
package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.location.Location; public class lmt extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fyl lfyl = new fyl(this); //Here the context is passing Location location = lfyl.getLocation(); String latLongString = lfyl.updateWithNewLocation(location); TextView myLocationText = (TextView)findViewById(R.id.myLocationText); myLocationText.setText("Your current position is:\n" + latLongString); } }