2012-05-02 8 views
1

私のアプリケーションでtwitter4jを使用しています。twitter.getAccountSettings()にAsyncTaskを実装する方法:Android

chbTwOption.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked) { 
        boolean showTwlogin = false; 
        if ("No".equalsIgnoreCase(twitPref.getTwitterAuthToken()) 
          || "No".equalsIgnoreCase(twitPref.getTwitterAuthTokenSecrate())) { 
         showTwlogin = true; 
        } else {       
         showTwlogin = TwitterUtils.isAuthenticated(AddSchedule.this); 
        } 

        if(showTwlogin) { 
         showSocialMediaLoginMessage(Constants.TW_LOGIN_MESSAGE); 
        } 
       } 
      } 
     }); 

いるその明確なように私は、認証トークンの有効期限が切れたり、ユーザはまだ

public static boolean isAuthenticated(Context context) { 

     TwitterPrefrences twitterPref = new TwitterPrefrences(context);  
     String token = twitterPref.getTwitterAuthToken(); 
     String secret = twitterPref.getTwitterAuthTokenSecrate(); 

     AccessToken a = new AccessToken(token,secret); 
     Twitter twitter = new TwitterFactory().getInstance(); 
     twitter.setOAuthConsumer(Constants.TWITT_CONSUMER_KEY, Constants.TWITT_CONSUMER_SECRET); 
     twitter.setOAuthAccessToken(a); 

     try { 
      twitter.getAccountSettings(); 
      return true; 
     } catch (TwitterException e) { 
      return false; 
     } 

    } 

ログインしていないかどうかを確認するためのコードの下に使用しています。しかし、私は次のようなエラーに

05-02 19:52:23.531: E/AndroidRuntime(1441): FATAL EXCEPTION: main 
    05-02 19:52:23.531: E/AndroidRuntime(1441): android.os.NetworkOnMainThreadException 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at java.net.InetAddress.getAllByName(InetAddress.java:220) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:479) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:45) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:178) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:75) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:103) 
    05-02 19:52:23.531: E/AndroidRuntime(1441):  at 

twitter4j.Twitter.getAccountSettings(Twitter.java:1440) 

発信者コードを取得していますAsyncTasktwitter.getAccountSettings()に実装する必要がありますが、方法として結果を得る方法はAsyncTaskですか? authトークンが期限切れであることを確認する他の方法はありますか?または、私が使用した通りisAuthenticated()という結果を返す方法としてAsyncTaskを実装するにはどうすればいいですか?

私をご案内ください。

ありがとうございます。

答えて

1

あなたはZwitscher のソースを見ても、ここで特にTwitterLoginActivity

+0

+1ありがとうございました!私はTwitterLoginActivityコードからアイディアを得ました。私は仕事をしました。 :) –

0

であなたはおそらく4.0デバイスにまたはHTTP conncetionが応答に時間がかかりすぎてされている場合は、このエラーを得たかもしれません。

あなたがasynctaskを知らないならば、簡単な解決策は

public static boolean isAuthenticated(Context context) { 
     new Thread() { 
     @Override 
     public void run() { 
     TwitterPrefrences twitterPref = new TwitterPrefrences(context);  
     String token = twitterPref.getTwitterAuthToken(); 
     String secret = twitterPref.getTwitterAuthTokenSecrate(); 

     AccessToken a = new AccessToken(token,secret); 
     Twitter twitter = new TwitterFactory().getInstance(); 
      twitter.setOAuthConsumer(Constants.TWITT_CONSUMER_KEY,Constants.TWITT_CONSUMER_SECRET); 
     twitter.setOAuthAccessToken(a); 

     try { 
      twitter.getAccountSettings(); 
      return true; 
     } catch (TwitterException e) { 
      return false; 
     } 
     } 
    }.start(); 

    } 

しかしasynctaskをimplemtingことになる良い方法となります。

おかげ santhu

+0

user187928どうすればいいですか? –

+0

Santnuこのコードはコンパイルされません –

+0

厳密なモードを有効にした状態で2.3以降の警告または殺しが表示されます。 Android3 +ではこれがデフォルトでオンになっています。だから、2.3のためにこの権利を得るのが良い。 –

関連する問題