2014-06-24 45 views
0

我试图将twitter与我的应用在Android中集成。我试着在这里给出的androidHive指南http://goo.gl/VF4PkTwitter与Android的集成

我每次点击登录按钮时都会收到下面的错误消息。

06-24 08:58:09.659: E/AndroidRuntime(30667): FATAL EXCEPTION: main 
06-24 08:58:09.659: E/AndroidRuntime(30667): Process: com.example.testoauthtweets, PID: 30667 
06-24 08:58:09.659: E/AndroidRuntime(30667): android.os.NetworkOnMainThreadException 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:150) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:98) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:122) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:281) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.example.testoauthtweets.MainActivity.loginToTwitter(MainActivity.java:189) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.example.testoauthtweets.MainActivity.access$1(MainActivity.java:175) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.example.testoauthtweets.MainActivity$1.onClick(MainActivity.java:123) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.view.View.performClick(View.java:4438) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.view.View$PerformClick.run(View.java:18422) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.os.Handler.handleCallback(Handler.java:733) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.os.Handler.dispatchMessage(Handler.java:95) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.os.Looper.loop(Looper.java:136) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at android.app.ActivityThread.main(ActivityThread.java:5001) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at java.lang.reflect.Method.invoke(Native Method) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
06-24 08:58:09.659: E/AndroidRuntime(30667): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 

在这里,我得到的错误:

private void loginToTwitter() { 
    // Check if already logged in 
    if (!isTwitterLoggedInAlready()) 
    { 
     ConfigurationBuilder builder = new ConfigurationBuilder(); 
     builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); 
     builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); 
     Configuration configuration = builder.build(); 

     TwitterFactory factory = new TwitterFactory(configuration); 
     twitter = factory.getInstance(); 

     try { 
      requestToken = twitter 
        .getOAuthRequestToken(TWITTER_CALLBACK_URL); 
      this.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
        .parse(requestToken.getAuthenticationURL()))); 
     } catch (TwitterException e) { 
      e.printStackTrace(); 
     } 
    } 

    else 
    { 
     // user already logged into twitter 
     Toast.makeText(getApplicationContext(), 
       "Already Logged into twitter", Toast.LENGTH_LONG).show(); 
    } 
} 

更新1:

我的库文件更新到最新版本。现在,我可以在登录后获取登录屏幕,并接受它返回到我的应用程序的访问权限,但它始终显示登录错误 - NULL。看起来访问令牌没有得到更新或接受。

有人可以帮我吗?

谢谢!

+0

这是第189行?请告诉我? – Kishan

+0

TwitterFactory factory = new TwitterFactory(configuration); \t \t \t twitter = factory.getInstance(); – TheDevMan

回答

0

android.os.NetworkOnMainThreadException

你正在做UI(主)线程网络相关的操作。你必须在单独的工作者线程中做这件事,或者使用一个asynctask。

NetworkOnMainThreadException - Developers site

注:这只是抛出应用针对蜂窝SDK或更高。

更新1: 在你的情况下把代码获取请求令牌和的AsyncTask的doInBackground方法获取认证的URL。

+0

我不知道我必须在哪里做asynctask部分? – TheDevMan

+0

无论你试图调用twitter4j方法,而twitter4j方法又调用api来通过互联网获取数据。 –

0

尝试了这一点,如果它的工作原理:

private void loginToTwitter() { 
// Check if already logged in 
if (!isTwitterLoggedInAlready()) 
{ 
    ConfigurationBuilder builder = new ConfigurationBuilder(); 
    builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); 
    builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); 
    Configuration configuration = builder.build(); 

    TwitterFactory factory = new TwitterFactory(configuration); 
    twitter = factory.getInstance(); 

    try { 

     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       requestToken = twitter 
         .getOAuthRequestToken(TWITTER_CALLBACK_URL); 

       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 

         this.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
            .parse(requestToken.getAuthenticationURL()))); 
        } 
       }); 

      } 
     }).start(); 



    } catch (TwitterException e) { 
     e.printStackTrace(); 
    } 
} 

else 
{ 
    // user already logged into twitter 
    Toast.makeText(getApplicationContext(), 
      "Already Logged into twitter", Toast.LENGTH_LONG).show(); 
} 
} 
+0

我仍然得到相同的错误。 – TheDevMan

+0

我更新了库文件到最新。现在,我可以在登录后获得登录屏幕,并接受它返回到我的应用程序的访问权限,但它总是显示登录错误 - NULL。 – TheDevMan

+0

把你的堆栈跟踪。 – Kishan