2013-07-25 48 views
1

我正在嘗試使用twitter4j進行Oauth進程。我查看了Android瀏覽器,發現互聯網連接仍然在打開Goog​​le。Twitter4j在Android 4中崩潰

我運行下面的代碼片段。當我在我的活動中運行此代碼時,在我的模擬器頁面中出現「不幸myapp已關閉」。在Logcat內部,我只看到:「ccc:trying1」。我沒有看到「試2」。

可能這個錯誤並不是因爲twitter4j,而是我找不到錯誤。

Twitter twitter = TwitterFactory.getSingleton(); 
    twitter.setOAuthConsumer("12345", "aaaa1212"); 
    RequestToken requestToken = null; 
    try { 
     Log.d("ccc","trying1"); 
     requestToken = twitter.getOAuthRequestToken(); 
     Log.d("ccc","trying2"); 
    } catch (TwitterException e) { 
     Log.d("unsuccess message:",e.getMessage()); 
     Log.d("unsuccess statuscode:", Integer.toString(e.getStatusCode())); 
     Log.d("unsuccess errormessage:",e.getErrorMessage()); 
     e.printStackTrace(); 
    } 

應用:
的minSdkVersion = 「10」
targetSdkVersion = 「17」
模擬器版本的Android 4.2.2

而且相關: Twitter4j getOAuthRequestToken() with callback URL fails on Android?

編輯:我很好奇非異步請求可能是問題。因爲相同的代碼完美適用於Android 2.3.3。我得到android.os.NetworkOnMainThreadException。 logcat的條目是這樣的:

07-24 23:29:40.190 5455-5455/com.myexample.android D/ccc: trying1 
07-24 23:29:40.520 5455-5455/com.myexample.android D/AndroidRuntime:  Shutting down VM 
07-24 23:29:40.535 5455-5455/com.myexample.android W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb4db7908) 
07-24 23:29:40.660 5455-5455/com.myexample.android E/AndroidRuntime: FATAL EXCEPTION: main 
    java.lang.RuntimeException: 
     Unable to start activity    
     ComponentInfo{com.myexample.android/com.myexample.android.MyActivity}: 
     android.os.NetworkOnMainThreadException 

    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5039) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.os.NetworkOnMainThreadException 
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
    at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
    at java.net.InetAddress.getAllByName(InetAddress.java:214) 
    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
    at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
    at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
    at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
    at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
    at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
    at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:150) 
    at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61) 
    at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:98) 
    at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:122) 
    at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104) 
    at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:281) 
    at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:273) 
    at com.myexample.android.MyActivity.onCreate(MyActivity.java:136) 
    at android.app.Activity.performCreate(Activity.java:5104) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
    ... 11 more 
+0

你有互聯網許可?

+0

是的,我在清單文件中擁有該權限。 – trante

+0

你可以發佈你的整個崩潰的stacktrace?您必須讓它崩潰;) –

回答

2

您例外名字說明了一切「NetworkOnMainThreadException」

您正在主/ UI線程上的網絡電話。

嘗試在一個單獨的線程或類似的AsyncTask執行此代碼:

new Thread(new Runnable() { 
    // your code 
}).start(); 

編輯:Android 2.3的如果你在主線程上網不檢查(爲此,我們都需要離開這個版本的Android後面;))