我試圖使一個企業搜索應用程序,是位置感知。要做到這一點我使用谷歌Places API的,特別是Places.GEO_DATA_API和LocationServices.API。這個想法是,用戶可以使用他們當前的位置或使用自動完成搜索來輸入地址。我的問題是,我想打電話時onConnected()
,因爲我不斷收到此錯誤兩個API是混錯:是否有可能有一個活動中的多個GoogleApiClients?
E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.depaul.csc472.coffeeshoplocator, PID: 9420
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.zzrb.zzb(Unknown Source)
at com.google.android.gms.internal.zzrf.zzb(Unknown Source)
at com.google.android.gms.internal.zzrd.zzb(Unknown Source)
at com.google.android.gms.location.internal.zzd.requestLocationUpdates(Unknown Source)
at edu.depaul.csc472.coffeeshoplocator.MainActivity.startLocationUpdates(MainActivity.java:233)
at edu.depaul.csc472.coffeeshoplocator.MainActivity.getLocation(MainActivity.java:241)
at edu.depaul.csc472.coffeeshoplocator.MainActivity.onConnected(MainActivity.java:263)
at com.google.android.gms.common.internal.zzk.zzp(Unknown Source)
at com.google.android.gms.internal.zzrd.zzn(Unknown Source)
at com.google.android.gms.internal.zzrb.zzass(Unknown Source)
at com.google.android.gms.internal.zzrb.onConnected(Unknown Source)
at com.google.android.gms.internal.zzrf.onConnected(Unknown Source)
at com.google.android.gms.internal.zzqr.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzj$1.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zze$zzj.zzavj(Unknown Source)
at com.google.android.gms.common.internal.zze$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zze$zza.zzv(Unknown Source)
at com.google.android.gms.common.internal.zze$zze.zzavl(Unknown Source)
at com.google.android.gms.common.internal.zze$zzd.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
它只是有時會發生。除了此次崩潰,我已成功運行該程序,沒有任何意外的行爲。
建立API中的代碼如下:
protected synchronized void buildGoogleApiClient(){
mGoogleApiLocation = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiAutoComplete = new GoogleApiClient.Builder(this)
.addApi(Places.GEO_DATA_API)
.enableAutoManage(this,GOOGLE_API_CLIENT_ID,this)
.addConnectionCallbacks(this)
.build();
}
這裏是我的onConnected()
方法,要求允許從用戶訪問精確的位置,然後嘗試獲取用戶的位置:
@Override
public void onConnected(Bundle bundle) {
requestForSpecificPermission();
getLocation();
placeArrayAdapter.setGoogleApiClient(mGoogleApiAutoComplete);
}
...和我getLocation()
方法:
private void getLocation(){
try {
location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiLocation);
if (location == null) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiLocation, locationRequest, this);
}
else{
handleNewLocation(location);
}
}catch (SecurityException e){
Toast.makeText(getApplicationContext(),
"You don't have permission!", Toast.LENGTH_LONG)
.show();
}
}
我的好奇心是:爲什麼我收到這個錯誤,如果從我的理解,你必須要連接到呼叫onConnected()
和兩個:爲什麼這只是發生了一些時間。是具有允許在首位多個客戶端,或者如果不是你怎麼去在同一個活動是利用兩種不同的技術(API)的?
我沒瘋,雖然權......這可能是其中的bug了。之前兩個API之間存在衝突,但您可以擁有多個API。它不再崩潰,但就像我說的那樣,它偶爾會這樣做。 – mmera
這將是一個問題,如果兩個不同的客戶端嘗試使用相同的回調。所以每個人都應該完全獨立的客戶端來完成這項工作。偶爾還是很奇怪 –