2017-12-16 3 views
0

Android Studio를 사용하는 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); 
      } 
     } 

그러나, 나는 항상 로그 캣으로, 오류가 아래와 같이

12 ~ 16 10 : 31 : 22.735 7218-7218/com.justinlee.whichpay E/MapsActivity을 : 장소 쿼리가 완료되지 않았습니다. com.google.android.gms.tasks.RuntimeExecutionException : com.google.android.gms.common.api.ApiException : 13 : 오류 at com.google.android.gms.tasks.zzn.getResult (알 수없는 출처) at 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) at 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)

문제점은 굵은 선에서 발생하는 것으로 보인다 . 누구든지 도와 줄 수 있습니까? 고마워요!

답변

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

    } 

을 또는 당신은 방법을 activityrunOnUiThread를 사용할 수 있습니다 같이.

+0

고마워, 방금 당신의 솔루션을 사용하고있어! – justinj

관련 문제