2017-05-04 24 views
0

所以我試圖做一個地圖活動,顯示我的當前位置在吐司的經度和緯度,但是我得到一個Null object reference即使對象是在我引用它之前實例化了一行。上面在創建時聲明瞭currentLocationAndroid地圖活動空對象引用,但我不明白爲什麼

錯誤信息點的代碼第二/倒數第三行:

java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.location.Location.mProvider' on a null object reference 

相關代碼:

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    //Initialize Google Play Services 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (ContextCompat.checkSelfPermission(this, 
       Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      buildGoogleApiClient(); 
      mMap.setMyLocationEnabled(true); 
     } 
    } else { 
     buildGoogleApiClient(); 
     mMap.setMyLocationEnabled(true); 
    } 

    currentLocation = new Location(LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient)); 
    Toast.makeText(this, currentLocation.toString(), Toast.LENGTH_LONG).show(); 
} 
+0

根據文件:「如果一個位置不可用,這應該很少發生,null將返回「 – Eselfar

回答

0

getLastLocation內onMapReady將檢查您的最後一個位置,當你使用它可以爲null第一次,所以你必須寫這onConnected

@Override 
public void onConnected(@Nullable Bundle bundle) { 

    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(3000); 
    mLocationRequest.setFastestInterval(3000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
    if (ContextCompat.checkSelfPermission(getActivity(), 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    } 



    mGoogleApiClient.isConnected(); 

    System.out.println("mGoogleApiClient.isConnected() " + mGoogleApiClient.isConnected()); 
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 


    System.out.println("mLastLocation " + mLastLocation); 
    if (mLastLocation != null) { 


    } 

    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 



} 
+0

我在我的onCreate方法中實現了此代碼,但錯誤沒有更改 – killiantos

+0

否您必須在您的活動上實現GoogleApiClient.ConnectionCallbacks,然後onConnected方法獲取內部覆蓋它必須使用此代碼。 –

+0

@killiantos是否有解決方案? –

相關問題