16

これを機能させたばかりですが、GPSを使用してより正確な位置を取得できるかどうかを確認するためにWifiをオフにすると、NullPointerエラーが発生し、理由がわかりません.

以下のコードが最初に呼び出されます。

 public void onConnected(Bundle dataBundle) {
        connected = true;
        //Request an update from the location client to get current Location details
        mLocationClient.requestLocationUpdates(mLocationRequest,this);
        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
    }

次に、このメソッドが呼び出される必要があります

public void onLocationChanged(android.location.Location location) {
        // Report to the UI that the location was updated
        String msg = "Updated Location: " +
                Double.toString(location.getLatitude()) + "," +
                Double.toString(location.getLongitude());
        if(tmp != location.getLatitude())
        {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
        tmp = location.getLatitude();
    }

そこに 2 つのトーストがあり、実際の G​​PS 座標で正常に戻ってくることがわかりますが、以下のコードを呼び出すと、新しいロケーション ラインでクラッシュします。getLastKnownLocation

public String getLocation()
    {
        // Get the location manager
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, false);
        android.location.Location location = locationManager.getLastKnownLocation(bestProvider);
        Double lat,lon;
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();
        try {
            lat = location.getLatitude ();
            lon = location.getLongitude ();
            Toast.makeText(this,""+lat.toString()+"-"+lon.toString(),Toast.LENGTH_SHORT).show();
            return new LatLng(lat, lon).toString();
        }
        catch (NullPointerException e){
            Toast.makeText(this,"HELL-NO",Toast.LENGTH_SHORT).show();
            Log.e("HELL-NO","n",e);
            e.printStackTrace();
            return null;
        }
    }

メソッドで取得されたように見える場所を取得しようとするonLocationChangedと、nullpointer が表示されるだけの理由がわかりません。

4

4 に答える 4

7

すべきでないときに、新しいロケーション API と古いロケーション API を混在させています。

最後の既知の場所を取得するには、電話するだけです

mLocationClient.getLastLocation();

位置情報サービスが接続されたら。

新しいロケーション API の使用方法を読む

http://developer.android.com/training/location/retrieve-current.html#GetLocation

于 2013-10-27T18:52:57.190 に答える