2013-03-18 51 views
2

我正在嘗試將我的應用程序與Twitter集成。但是我收到了一些錯誤。我使用this site的代碼。我爲我的應用程序創建了一個API。我已將網站的網址設置爲http://www.androidhive.info,並將回調網址設置爲http://androidhive.info。我更新了消費者和消費者的關鍵祕密。將Twitter與我的Android應用程序集成

我不知道爲什麼我得到這個錯誤。我在這裏附加了錯誤logcat:

03-18 21:36:13.971: E/AndroidRuntime(1339): FATAL EXCEPTION: main 
03-18 21:36:13.971: E/AndroidRuntime(1339): android.os.NetworkOnMainThreadException 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at java.net.InetAddress.getAllByName(InetAddress.java:220) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:158) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:121) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:276) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at com.androidhive.twitterconnect.MainActivity.loginToTwitter(MainActivity.java:236) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at com.androidhive.twitterconnect.MainActivity.access$1(MainActivity.java:223) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at com.androidhive.twitterconnect.MainActivity$1.onClick(MainActivity.java:123) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.view.View.performClick(View.java:3480) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.view.View$PerformClick.run(View.java:13983) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.os.Handler.handleCallback(Handler.java:605) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.os.Looper.loop(Looper.java:137) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-18 21:36:13.971: E/AndroidRuntime(1339):  at dalvik.system.NativeStart.main(Native Method) 

回答

0

在主線程上執行網絡操作是一種不好的做法,這就是爲什麼您會看到這一點。這是政策阻止的。 如果你真的必須爲測試做了,把你的OnCreate如下:

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

請記住這是非常不好的做法,以做到這一點,最好應該將你的網絡代碼到AsyncTaskThread

+0

請問您可以發佈使用Twitter API的好做法... – Developer 2013-03-18 16:05:03

+0

任何人都可以發佈代碼糾正,因爲我沒有任何使用twitter,facebook ..... api的經驗。 – Developer 2013-03-18 16:35:15

+0

如果你只是想讓它快速工作,請將我上面的答案中的兩行復制到主要活動的onCreate()方法中,但請仔細閱讀爲什麼它不好。 – tristan2468 2013-03-18 16:47:53

0

您應該將試圖使用Twitter API(或執行任何其他網絡操作)的代碼移動到新的AsyncTask或新的Thread

3

android.os.NetworkOnMainThreadException

從Android 3.0的,你不能試圖從主(UI)線程進行聯網操作。所以你必須將你的代碼移動到後臺線程,最好的解決方案是使用AsyncTask來達到你的目標。

它被指定爲您的任務。通常在UI線程上做一些長時間的計算,網絡和其他工作也是一種不好的做法。您應該讓Activity類清理乾淨,並將應用程序的邏輯與外觀分開。的AsyncTask的

主要優點:它的通用型(安全),提供了一些方法,如果你想宣佈「什麼改變」​​的用戶和實施是不難理解的。

如果你想要一些靈感看看Zwitscher's github

相關問題