这种随机发生的,尤其是在Genymotion模拟器 我认为这个问题是该行:PlaceDetectionApi示出了粘结剂调用失败(安卓 - NullPointerException异常)
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(mGoogleApiClient, null);
下面我让所有的代码:
**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
活页夹调用失败
java.lang.NullPointerException:试图调用virtu人的方法 '无效 com.google.android.gms.location.places.zzo $ zzf.zzb(com.google.android.gms.common.api.Result)' 上的空对象引用
在玉米.google.android.gms.location.places.zzo.zzbs(来源不明)
在 com.google.android.gms.location.places.internal.zzl $ zza.onTransact(未知 来源)
at android.os.Binder.execTransact(Binder.java:565)
可能重复[什么是NullPointerException,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix -它) – BlackHatSamurai