我是Android的新手。我开发了一款应用,我需要使用gps,互联网或使用cellid跟踪用户的位置。我正在使用2 Activities
(MainActivity
和SavelocationsActivity implements LocationListener
) ,Service(Ser)
和Broadcast Receiver(k)
。
当我点击Button
中的MainActivity
时,需要转到SaveLocationsActivity
。我曾经在几天前得到它,但现在lattitude
和longitude
值变为null
,我收到以下错误,即:
null pointer exception.
因为我是新手,请一步一步地告诉我该做什么以及我哪里出错。谢谢你提前。我在下面发布代码和错误日志。
SaveLocationsActivity
public class SaveLocationsActivity extends Activity implements LocationListener{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.savelocations);
locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE);
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
//Toast.makeText(this,"in activity"+isNetworkEnabled ,Toast.LENGTH_LONG).show();
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(isNetworkEnabled==true && isGPSEnabled==false)
{
getLocation(LocationManager.NETWORK_PROVIDER);
}
else if(isGPSEnabled==true && isNetworkEnabled==false)
{
getLocation(LocationManager.GPS_PROVIDER);
}
else if(isGPSEnabled==true && isNetworkEnabled==true )
{
getLocation(LocationManager.GPS_PROVIDER);
}
private Location getLocation(String provider) {
// TODO Auto-generated method stub
if (locationManager.isProviderEnabled(provider)) {
locationManager.requestLocationUpdates(provider,
6000, 10, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(provider);
double latitude = location.getLatitude();
double longitude = location.getLongitude();
final String t5 = String.valueOf(latitude);
final String t6 = String.valueOf(longitude);
e5.setText(t5);
e6.setText(t6);
savelocation.put("t5",t5);
savelocation.put("t6",t6);
return location;
}
}
return location;
}
@Override
public void onLocationChanged(Location l) {
// TODO Auto-generated method stub
double latitude = l.getLatitude();
double longitude = l.getLongitude();
final String t5 = String.valueOf(latitude);
final String t6 = String.valueOf(longitude);
//Toast.makeText(SaveLocationsActivity.this,""+t5,Toast.LENGTH_LONG).show();
e5.setText(t5);
e6.setText(t6);
}
错误日志:
03-21 23:34:50.309: E/AndroidRuntime(15368): FATAL EXCEPTION: main
03-21 23:34:50.309: E/AndroidRuntime(15368): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.broadcast/com.example.broadcast.SaveLocationsActivity}: java.lang.NullPointerException
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2114)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.ActivityThread.access$700(ActivityThread.java:143)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.os.Handler.dispatchMessage(Handler.java:99)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.os.Looper.loop(Looper.java:137)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.ActivityThread.main(ActivityThread.java:4960)
03-21 23:34:50.309: E/AndroidRuntime(15368): at java.lang.reflect.Method.invokeNative(Native Method)
03-21 23:34:50.309: E/AndroidRuntime(15368): at java.lang.reflect.Method.invoke(Method.java:511)
03-21 23:34:50.309: E/AndroidRuntime(15368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
03-21 23:34:50.309: E/AndroidRuntime(15368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
03-21 23:34:50.309: E/AndroidRuntime(15368): at dalvik.system.NativeStart.main(Native Method)
03-21 23:34:50.309: E/AndroidRuntime(15368): Caused by: java.lang.NullPointerException
03-21 23:34:50.309: E/AndroidRuntime(15368): at com.example.broadcast.SaveLocationsActivity.getLocation(SaveLocationsActivity.java:209)
03-21 23:34:50.309: E/AndroidRuntime(15368): at com.example.broadcast.SaveLocationsActivity.onCreate(SaveLocationsActivity.java:100)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.Activity.performCreate(Activity.java:5203)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-21 23:34:50.309: E/AndroidRuntime(15368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
03-21 23:34:50.309: E/AndroidRuntime(15368): ... 11 more
答案 0 :(得分:3)
方法getLocation()
中可能存在问题:
if (locationManager != null) {
location = locationManager.getLastKnownLocation(provider);
double latitude = location.getLatitude();
double longitude = location.getLongitude();
因为如果以前的位置未知,getLastKnownLocation
可以返回null
。因此,通过致电location.getLatitude()
,您需要NullPointerException
为避免这种情况,您可以检查null
的返回值,如:
if (locationManager != null) {
location = locationManager.getLastKnownLocation(provider);
if(location!=null)
//...etc...