【问题标题】:location.getLatitude() throws NullPointerException android [duplicate]location.getLatitude() 抛出 NullPointerException android [重复]
【发布时间】:2015-07-02 20:26:33
【问题描述】:

我正在尝试获取当前的经纬度坐标。

我的代码

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_LOW);
    String bestProvider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(bestProvider);

    if (location != null) {
        onLocationChanged(location);
    }
    locationManager.requestLocationUpdates(bestProvider, 20000, 0, this);

    double latitude = location.getLatitude();
    double longitude = location.getLongitude();

错误信息

java.lang.RuntimeException: Unable to start activity ComponentInfo{conic.com.restaurant/conic.com.restaurant.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:110)
            at android.os.Looper.loop(Looper.java:193)
            at android.app.ActivityThread.main(ActivityThread.java:5292)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at conic.com.restaurant.MainActivity.displayListView(MainActivity.java:121)
            at conic.com.restaurant.MainActivity.onCreate(MainActivity.java:50)
            at android.app.Activity.performCreate(Activity.java:5264)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:110)
            at android.os.Looper.loop(Looper.java:193)
            at android.app.ActivityThread.main(ActivityThread.java:5292)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
            at dalvik.system.NativeStart.main(Native Method)

这里是清单声明 清单声明

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

双纬度 = location.getLatitude();在第 121 行

希望你能帮助我。

【问题讨论】:

  • 两者都在清单中声明
  • 位置不需要互联网。我想你应该知道这一点。
  • 现在 Google 已经引入了 Fused Location API。它比您以前使用的这种方式效率更高。参考这个链接。 Link

标签: android location


【解决方案1】:

在获取纬度和经度之前,请检查:

if(location!=null){
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
}

【讨论】:

    【解决方案2】:

    使用 NETWORK_PROVIDER 获取位置,因为很多时候 GPS 会给出零纬度和经度

    m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);
        m_location = m_locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    

    在清单中添加以下权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    

    【讨论】:

      【解决方案3】:

      试试这个:

      LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
      Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
      double longitude = location.getLongitude();
      double latitude = location.getLatitude();
      
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-03
        相关资源
        最近更新 更多