【问题标题】:Why is the Service making the app to force close?为什么服务使应用程序强制关闭?
【发布时间】:2014-03-21 19:24:21
【问题描述】:

我是 Android 新手,需要帮助来解决这个问题。我有一个实现 LocationListener 的服务。当应用程序崩溃时,我收到以下错误。请解释我应该对我的代码进行哪些更改。我参考了许多 LocationListener 和 Services 教程,但无法完全弄清楚发生了什么。请逐步消除我的疑惑。我正在发布我的代码和错误日志:

新的错误日志:

 03-22 01:42:20.249: E/AndroidRuntime(6537): FATAL EXCEPTION: main
 03-22 01:42:20.249: E/AndroidRuntime(6537): java.lang.NullPointerException
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at com.example.broadcast.Ser.onLocationChanged(Ser.java:131)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:263)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:196)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:212)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at android.os.Handler.dispatchMessage(Handler.java:99)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at android.os.Looper.loop(Looper.java:137)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at android.app.ActivityThread.main(ActivityThread.java:4960)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at java.lang.reflect.Method.invokeNative(Native Method)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at java.lang.reflect.Method.invoke(Method.java:511)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
 03-22 01:42:20.249: E/AndroidRuntime(6537):    at dalvik.system.NativeStart.main(Native Method)

这是我的(新)服务代码:

public class Ser extends Service implements LocationListener{

   public Location getLocation(String provider) {
    if (locationManager.isProviderEnabled(provider)) {
        locationManager.requestLocationUpdates(provider,
                MIN_TIME_FOR_UPDATE, MIN_DISTANCE_FOR_UPDATE, this);
        if (locationManager != null) {
            location = locationManager.getLastKnownLocation(provider);


            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            String l1=String.valueOf(latitude);
            String l2=String.valueOf(longitude);


        }
    }

    return location;
}
 }
  public void onLocationChanged(Location location) {

    if(location!=null)
    {
    double latitude =location.getLatitude();
    double longitude = location.getLongitude();
    Log.i("msg","in locationchanged");

    }
   }

【问题讨论】:

  • 如果Ser,第151行是什么?

标签: android service forceclose locationlistener


【解决方案1】:

public void onLocationChanged(Location location) {

    double latitude =location.getLatitude();
    double longitude = location.getLongitude();
    Log.i("msg","in locationchanged");

}

检查location 是否为空。

public void onLocationChanged(Location location) {
    if (location == null) return;

    double latitude =location.getLatitude();
    double longitude = location.getLongitude();
    Log.i("msg","in locationchanged");

}

【讨论】:

  • 我已经按照你说的修改了代码,但是仍然出现错误。请指导我。自上周以来,我一直在尝试解决此问题。
  • Ser.java 的第 131 行?
【解决方案2】:

getLastKnownLocation() 可以返回null,因此您应该在调用location.getLatitude()location.getLongitude() 之前进行检查

【讨论】:

  • 我已经设置了这个条件 if (locationManager != null) 但它不起作用
  • 你应该检查locationManager.getLastKnownLocation(provider)返回的Location对象,而不是locationManager
猜你喜欢
  • 2015-04-11
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
相关资源
最近更新 更多