0

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

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

编辑

好的,这就是我所做的:

    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 是否为空。结果:不是。然后我取消了 LocTools.goToLocation 的注释,所以代码如下所示:

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

并运行该应用程序,它在运行时崩溃 - NullPointer!我不明白它为什么这样做。没有空指针...

4

2 回答 2

0

问题:LatLng 不为 NULL。尝试将 Map Camera 移动到 LatLng 位置时。收到 NullPointerException。这似乎很奇怪,因为没有合理的解释:

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

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);
        }
    });
}

希望这可以帮助某人。

于 2013-08-20T11:28:51.810 回答
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);
        }
    }

或者

 if (new LocTools(this).getMyLocation()!=null) {
        LatLng ll = new LocTools(this).getMyLocation();
        LocTools.goToLocation(map,ll,3,true);
    }
于 2013-08-20T10:51:50.930 回答