내 Android 용 애플리케이션에 Google 드라이브 API를 구현하고 있습니다. PendingResult # setResultCallback()을 사용하고 싶지 않고, PendingResult # await()를 사용하여 다음 라인에서 결과를 얻을 수 있으므로 기다릴 필요가 없습니다. 모든 것이 백그라운드에서 실행되기 때문에 이것은 문제가되지 않습니다.Google 드라이브 API 대기() UI 스레드 오류
그러나 await()을 호출 할 때마다 다음 오류가 발생합니다. AsyncTask, Thread, IntentService, AsyncTask가있는 서비스 및 스레드가있는 서비스에서 await()를 사용하는 Google 드라이브 API에 대한 단일 호출을 실행 해 보았습니다. 매번 다음 오류가 발생했습니다. 내 스레드 구현에서 Looper.prepare()를 호출 해 보았지만 아무 것도 해결하지 못했습니다.
누구도이 문제를 겪었습니까?
java.lang.IllegalStateException: await must not be called on the UI thread
at com.google.android.gms.internal.hm.a(Unknown Source)
at com.google.android.gms.common.api.a$a.await(Unknown Source)
at [OMITTED].GoogleDriveManager$2.onConnected(GoogleDriveManager.java:83)
at com.google.android.gms.internal.hc.c(Unknown Source)
at com.google.android.gms.common.api.c.eK(Unknown Source)
at com.google.android.gms.common.api.c.d(Unknown Source)
at com.google.android.gms.common.api.c$2.onConnected(Unknown Source)
at com.google.android.gms.internal.hc.c(Unknown Source)
at com.google.android.gms.internal.hc.cp(Unknown Source)
at com.google.android.gms.internal.hb$h.b(Unknown Source)
at com.google.android.gms.internal.hb$h.d(Unknown Source)
at com.google.android.gms.internal.hb$b.fv(Unknown Source)
at com.google.android.gms.internal.hb$a.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5146)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
at dalvik.system.NativeStart.main(Native Method)
이
내가 API를 테스트하기 위해 사용하고있는 코드입니다 : apiClient = new GoogleApiClient.Builder(mContext)
.addApi(Drive.API)
.addScope(Drive.SCOPE_APPFOLDER)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
LogUtil.log(TAG, "onConnected()");
connected = true;
DriveApi.ContentsResult result = Drive.DriveApi.newContents(apiClient).await();
}
@Override
public void onConnectionSuspended(int i) {
LogUtil.log(TAG, "onConnectionSuspended()");
connected = false;
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
LogUtil.log(TAG, "onConnectionFailed()");
connected = false;
}
})
.build();
apiClient.connect();
입니다 : 비동기 완료
newContents()
기다릴 setResultCallback()를 사용하여 - 물론은, 지금까지
await()
를 호출 할 필요가 없다? – tyczjasynctask의 doInBackground 메서드 내에서 두 번째 코드 블록을 실행하고 두 번째 코드 블록에 오류가 표시되었습니다. –
분명히하지 않았기 때문에 구현 한 방법을 보여줄 수 있습니까? – tyczj