2014-11-17 9 views
-3

Android에서 NetworkOnMainThreadException 문제가 있습니다.Android, NetworkOnMainThreadException google 드라이브

Google API를 사용하여 Java 응용 프로그램을 구축합니다.

developers.google.com/api-client-library/java/apis/drive/v2 

내가 구글 libs와 같은 자바 코드에서 작동하는이 내 코드

String code = data.getStringExtra("code"); 
     GoogleTokenResponse response; 
     try { 
      response = drive_flow.newTokenRequest(code).setRedirectUri(DRIVE_REDIRECT_URI).execute(); 
      GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(jsonFactory) 
      .setClientSecrets(DRIVE_CLIENT_ID, DRIVE_CLIENT_SECRET) 
      .build() 
      .setFromTokenResponse(response); 
      //Create a new authorized API client 
      drive_service = new Drive.Builder(httpTransport, jsonFactory, credential).build(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } //catch (NetworkOnMainThreadException e){ 

     //} 

(내가 잡을 때 NetworkOnMainThreadException의 drive_service가 null이됩니다)입니다

AVD 플랫폼 2.3.3 매우에 내 응용 프로그램 실행 좋아,하지만 4.1.1 (genymotion에서) 작동하지 않는다. 내 나쁜 영어에 대한

11-17 02:53:37.190: E/AndroidRuntime(1408): FATAL EXCEPTION: main 
11-17 02:53:37.190: E/AndroidRuntime(1408): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=999, result=999, data=Intent { (has extras) }} to activity {com.uit.testcloud3/com.uit.testcloud3.MainActivity}: android.os.NetworkOnMainThreadException 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.os.Looper.loop(Looper.java:137) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at dalvik.system.NativeStart.main(Native Method) 
11-17 02:53:37.190: E/AndroidRuntime(1408): Caused by: android.os.NetworkOnMainThreadException 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:281) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at com.uit.testcloud3.MainActivity.onActivityResult(MainActivity.java:272) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
11-17 02:53:37.190: E/AndroidRuntime(1408):  ... 11 more 
11-17 02:54:40.366: E/Trace(1462): error opening trace file: No such file or directory (2) 
11-17 02:54:40.974: W/EGL_emulation(1462): eglSurfaceAttrib not implemented 

내 허락 독서에 대한

<uses-permission android:name="android.permission.INTERNET" /> 

감사하고 죄송합니다 :

는 로그 캣입니다.

답변

1

랩이 코드하십시오 Thread 또는

0

AsyncTask 시도 비동기 작업 내부

try { 
     response = drive_flow.newTokenRequest(code).setRedirectUri(DRIVE_REDIRECT_URI).execute(); 
     GoogleCredential credential = new GoogleCredential.Builder() 
     .setTransport(httpTransport) 
     .setJsonFactory(jsonFactory) 
     .setClientSecrets(DRIVE_CLIENT_ID, DRIVE_CLIENT_SECRET) 
     .build() 
     .setFromTokenResponse(response); 
     //Create a new authorized API client 
     drive_service = new Drive.Builder(httpTransport, jsonFactory, credential).build(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } //catch (NetworkOnMainThreadException e){ 

, this blog.

-1

사용하여 한 OnCreate에서이 코드() 메소드

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
.detectAll() 
.penaltyLog() 
.build(); 
StrictMode.setThreadPolicy(policy); 

참조 또는 AsyncT 내에서 Http 호출 사용 청하다.

+0

이렇게해도 문제가 해결되지 않고 단지 깔개 아래로 스윕됩니다. – panini

관련 문제