2017-04-18 3 views
-1

Dieses zufällig passieren, vor allem in Genymotion Emulator denke ich das Problem, dass Zeile ist:PlaceDetectionApi zeigt Binder Call (Android - Nullpointer) fehlgeschlagen

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(mGoogleApiClient, null); 

Below i den gesamten Code lassen:

**MainActivity** 

public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { 

    private GoogleApiClient mGoogleApiClient; 
    private static final int GOOGLE_API_CLIENT_ID = 0; 
    private static final int PERMISSION_REQUEST_CODE = 100; 
    int PLACE_PICKER_REQUEST = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button currentButton = (Button) findViewById(R.id.currentButton); 

     mGoogleApiClient = new GoogleApiClient 
       .Builder(this) 
       .addApi(Places.GEO_DATA_API) 
       .addApi(Places.PLACE_DETECTION_API) 
       .enableAutoManage(this, this) 
       .build(); 

     currentButton.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       if(mGoogleApiClient.isConnected()){ 
        if(ContextCompat.checkSelfPermission(MainActivity.this, 
          Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){ 
         ActivityCompat.requestPermissions(MainActivity.this, 
           new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE); 
        }else{ 
         callPlaceDetectionApi(); 
        } 
       } 
      } 
     }); 
    } 

    @Override 
    protected void onStart() { 
     mGoogleApiClient.connect(); 
     super.onStart(); 
    } 

    @Override 
    protected void onStop() { 
     mGoogleApiClient.disconnect(); 
     super.onStop(); 
    } 


    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.e(String.valueOf(this.getClass()), "Google Places API connection failed with error code: " + 
     connectionResult.getErrorCode()); 

     Toast.makeText(this, "Google Places API connection failed with error code: " + connectionResult.getErrorCode() 
     , Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     switch (requestCode) { 
      case PERMISSION_REQUEST_CODE: 
       if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
        callPlaceDetectionApi(); 
       } break; 
     } 
    } 

    private void callPlaceDetectionApi() throws SecurityException { 
     PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi 
       .getCurrentPlace(mGoogleApiClient, null); 
     result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { 
      @Override 
      public void onResult(@NonNull PlaceLikelihoodBuffer placeLikelihoods) { 
       for(PlaceLikelihood placeLikelihood : placeLikelihoods){ 
        Log.i(String.valueOf(this.getClass()), String.format("Place '%s' with " + 
            "likelihood: %g", 
          placeLikelihood.getPlace().getName(), 
          placeLikelihood.getLikelihood())); 
       } 
       placeLikelihoods.release(); 
      } 
     }); 
    } 
} 

Log 

Binder Anruf fehlgeschlagen

java.lang.NullPointerException: Versuch, virtu aufrufen al-Methode 'Leerer com.google.android.gms.location.places.zzo $ zzf.zzb (com.google.android.gms.common.api.Result)' auf einer Null-Objekt Referenz

bei com .google.android.gms.location.places.zzo.zzbs (Unknown Source)

bei com.google.android.gms.location.places.internal.zzl $ zza.onTransact (Unbekannt Quelle)

bei android.os.Binder.execTransact (Binder.java:565)

+0

Mögliche Duplikate von [Was ist eine NullPointerException und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -es) – BlackHatSamurai

Antwort

0

Höchstwahrscheinlich Places.PlaceDetectionApi.getCurrentPlace(mGoogleApiClient, null); gibt null zurück. Sie sollten einen Haltepunkt setzen und Ihren Code durchgehen und herausfinden, was null ist.