2017-12-16 9 views
0

Androidスタジオを使用してGoogleのGeoDataClientを使用して場所の情報を取得しようとしました。 具体的には、OnPoiClickListenerを設定しました。関心のあるポイントをクリックするとマーカーが表示され、詳細を示すInfoWindowが表示されます。詳細を知るために、GeoDataClientのgetPlaceById(id)メソッドを使用しました。下記に示すように、以下に示すようAndroid - mGeoDataClient.getPlaceById(id)を使用したタスクからPlaceBufferResponseを取得しようとしましたが、失敗しました

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); 
      } 
     } 

しかし、私はいつもlogcatで、エラーが発生します。

12-16 10:31:22.735 7218から7218/E/MapsActivity com.justinlee.whichpay :プレースクエリーが完了しませんでした。 com.google.android.gms.tasks.RuntimeExecutionException:com.google.android.gms.common.api.ApiException:13:エラー 、com.google.android.gms.tasks.zzn.getResult(不明な情報源) com.justinlee.whichpay.MapsActivity $ 5.onComplete(MapsActivity.java:363) com.google.android.gms.tasks.zzf.run(不明な情報源) android.os.Handler.handleCallback(Handler .java:751) android.os.Handler.dispatchMessage(Handler.java:95) (android.os.Looper.loop(Looper.java:154)) at android.app.ActivityThread.main(ActivityThread.java :6119) at java.lang.reflect.Method.invoke(ネイティブメソッド) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) 原因:com.google.android.gms.common.api.ApiException:13:エラー at com.google.android.gms.common.internal.zzb.zzy(不明な情報源) com.google.android.gms.common.internal.zzbk.zzz(不明な情報源) com.google.android.gms.common.internal.zzbl.zzr(不明な情報源) (com.google.android.gms) .common.api.internal.zzs.zzc(不明な情報源) com.google.android.gms.common.ap i.internal.zzs.setResult(不明な情報源) com.google.android.gms.location.places.zzm.zzar(不明な情報源) com.google.android.gms.location.places.internal.zzx。コードから

PlaceBufferResponse bufferResponse = task.getResult(); 

への参照を有するandroid.os.Binder.execTransactでonTransact(不明なソース) (Binder.java:565)

問題は太字の行にoccuringているように見えます、 。誰も助けることができますか?どうもありがとう!

答えて

0

あなたはこれらの文を使用してバックグラウンドスレッドからUIを変更している:

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

あなたがそうしたい場合は、UIスレッドに変性作用をキューにハンドラを使用する必要があり、完全なコードをします次のようになります。

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); 
      } 

    } 

それとも、activityの方法runOnUiThreadを使用することができます。

+0

ありがとう、私はちょうどあなたのソリューションを使用して働いている! – justinj

関連する問題