2017-12-16 2 views
0

Ich habe versucht, einen Ort Informationen mit Google GeoDataClient in Android mit Android-Studio zu bekommen. Konkret habe ich einen OnPoiClicklistener eingerichtet. Wenn also auf einen Punkt von Interesse geklickt wird, erscheint ein Marker und ein InfoWindow erscheint, um die Details anzuzeigen. Um die Details zu erhalten, habe ich die Methode getPlaceById (id) des GeoDataClient verwendet.Android - Versuchen, eine PlaceBufferResponse von einer Aufgabe mit mGeoDataClient.getPlaceById (ID) zu bekommen, aber fehlgeschlagen

Task<PlaceBufferResponse> placeBufferResponseTask = mGeoDataClient.getPlaceById(mPlaceId); 
placeBufferResponseTask.addOnCompleteListener(new OnCompleteListener<PlaceBufferResponse>() { 
    @Override 
    public void onComplete(@NonNull Task<PlaceBufferResponse> task) { 
     try { 
      PlaceBufferResponse bufferResponse = task.getResult(); 
      final Place resultPlace = bufferResponse.get(0); 

      placeName.setText(resultPlace.getName()); 
      placeType.setText(resultPlace.getPlaceTypes().get(0)); 
      placeAddress.setText(resultPlace.getAddress()); 


      bufferResponse.release(); 
      } catch (RuntimeException e) { 
       Log.e(TAG, "Place query did not complete.", e); 
      } 
     } 

ich einen Fehler, mit dem logcat immer jedoch, wie unten dargestellt: Wie unten gezeigt

Oktober 12-16: 31: 22,735 7218-7218/com.justinlee.whichpay E/MapsActivity : Die Abfrage wurde nicht abgeschlossen. com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 13: FEHLER at com.google.android.gms.tasks.zzn.getResult (Unbekannte Quelle) bei com.justinlee.whichpay.MapsActivity $ 5.onComplete (MapsActivity.java:363) bei com.google.android.gms.tasks.zzf.run (Unbekannte Quelle) bei android.os.Handler.handleCallback (Handler .java: 751) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java : 6119) bei java.lang.reflect.Method.invoke (systemeigene Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) verursacht durch: com.google.android.gms.common.api.ApiException: 13: FEHLER bei com.google.android.gms.common.internal.zzb.zzy (unbekannte Quelle) unter com.google.android.gms.common.internal.zzbk.zzz (Unbekannte Quelle) unter com.google.android.gms.common.internal.zzbl.zzr (Unbekannte Quelle) unter com.google.android.gms .common.api.internal.zzs.zzc (Unbekannte Quelle) at com.google.android.gms.common.ap i.internal.zzs.setResult (Unbekannte Quelle) unter com.google.android.gms.location.places.zzm.zzar (Unbekannte Quelle) unter com.google.android.gms.location.places.internal.zzx. onTransact (Unknown Source) bei android.os.Binder.execTransact (Binder.java:565)

die Probleme scheint auf der fett gedruckten Linie auftreten zu werden, die aus dem Code Bezug auf

PlaceBufferResponse bufferResponse = task.getResult(); 

hat . Kann jemand helfen? Danke vielmals!

Antwort

0

Sie die Benutzeroberfläche aus dem Hintergrund-Thread mit dieser Anweisung ändern:

placeName.setText(resultPlace.getName()); 
placeType.setText(resultPlace.getPlaceTypes().get(0)); 
placeAddress.setText(resultPlace.getAddress()); 

Wenn Sie dies tun mögen, müssen Sie einen Handler verwenden, um die modifizierende Wirkung auf UI-Thread in der Warteschlange, vollständiger Code wird wie folgt aussehen:

placeBufferResponseTask.addOnCompleteListener(new OnCompleteListener<PlaceBufferResponse>() { 
     @Override 
     public void onComplete(@NonNull Task<PlaceBufferResponse> task) { 
      try { 
       PlaceBufferResponse bufferResponse = task.getResult(); 
       final Place resultPlace = bufferResponse.get(0); 

       Handler mainHandler = new Handler(Looper.getMainLooper()); 

       Runnable myRunnable = new Runnable() { 
        @Override 
        public void run() { 
         placeName.setText(resultPlace.getName()); 
         placeType.setText(resultPlace.getPlaceTypes().get(0)); 
         placeAddress.setText(resultPlace.getAddress()); 
        } 
       }; 
       mainHandler.post(myRunnable); 

       bufferResponse.release(); 
      } catch (RuntimeException e) { 
       Log.e(TAG, "Place query did not complete.", e); 
      } 

    } 

Oder können Sie Methode runOnUiThread von activity verwenden.

+0

Vielen Dank, ich habe es gerade mit Ihrer Lösung funktioniert! – justinj

Verwandte Themen