Android GPS空指针异常

时间:2013-08-20 10:31:04

标签: android gps nullpointerexception

基本上,我不知道这是Eclipse的问题还是手机的GPS或我应用的代码。

问题:当我尝试重新启动手机并运行我的应用时,它会在运行时崩溃。错误是NullPointer(未提供行号)。但是,如果我从onCreate()中删除两行来检查GPS,然后再次运行应用程序,它就能正常工作。然后,如果我再次重新添加这些行,该应用程序工作。所以基本上,代码很好,但是如果在重新启动手机后第一次运行应用程序,它会崩溃。以下是一些相关代码:

修改

好的,这就是我所做的:

    if (new LocTools(this).checkGPS() == true) { // new method, checks if Gps is active and returns boolean.
        LatLng ll = new LocTools(this).getMyLocation();
        if (ll != null) {
            Toast.makeText(this, "LatLng: "+ll, Toast.LENGTH_SHORT).show();
            // ll is NOT null
            //LocTools.goToLocation(map,ll,5,true);
        } else {
            Toast.makeText(this, "Gps error", Toast.LENGTH_SHORT).show();
        }
    }

我注释掉LocTools.goToLocation行并插入Toast以查看LatLng是否为null。结果:不是。然后我取消注释了LocTools.goToLocation,所以代码看起来像这样:

        ...
        if (ll != null) {
            Toast.makeText(this, "LatLng: "+ll, Toast.LENGTH_SHORT).show();
            LocTools.goToLocation(map,ll,5,true);
        }
        ...

然后运行应用程序,它在运行时崩溃了 - NullPointer!我不明白为什么这样做。没有NullPointer ......

2 个答案:

答案 0 :(得分:0)

返回默认位置而不是null。

    public LatLng getMyLocation() {
        final LocationManager manager = (LocationManager) mContext.getSystemService( Context.LOCATION_SERVICE );
        if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle("GPS");
            builder.setIcon(R.drawable.gps);
            builder.setMessage("Please enable GPS satellites then try again")
               .setCancelable(false)
               .setPositiveButton("GPS settings", new DialogInterface.OnClickListener() {
                   public void onClick(final DialogInterface dialog, final int id) {
                       mContext.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                   }
               })
               .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                   public void onClick(final DialogInterface dialog, final int id) {
                        dialog.cancel();
                   }
               });
            final AlertDialog alert = builder.create();
            alert.show();


return new LatLng(mock_lat,mock_lng);

        } else {
            LocationManager lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
            Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            double lat = l.getLatitude();
            double lng = l.getLongitude();
            return new LatLng(lat,lng);
        }
    }

OR

 if (new LocTools(this).getMyLocation()!=null) {
        LatLng ll = new LocTools(this).getMyLocation();
        LocTools.goToLocation(map,ll,3,true);
    }

答案 1 :(得分:0)

问题:LatLng不是NULL。尝试将地图相机移动到LatLng位置时。正在收到NullPointerException。这似乎很奇怪,因为没有合理的解释:

解决:我从onCreate()执行了AsyncTask。要解决NullPointerExeception,我必须包含moveCamera命令(在我的情况下,我的自定义LocTools.goToLocation()方法)必须在Runnable中。像这样:

if (new LocTools(this).checkGPS() == true) {
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        public void run() {
            LocTools.goToLocation(map, new LocTools(getBaseContext()).getMyLocation(),5,true);
        }
    });
}

希望这有助于某人。