2012-05-02 2 views
1

내 응용 프로그램에 twitter4j를 사용하고 있습니다. 인증 토큰이 만료되었거나 사용자가 아직twitter.getAccountSettings()에 대한 AsyncTask 구현 방법 : Android

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) 

발신자 코드

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); 
        } 
       } 
      } 
     }); 

그 분명 그

으로 오류를 다음 무엇입니까 을 twitter.getAccountSettings()에 구현해야하지만 어떻게 결과를 얻을 수있는 방법은 AsyncTask입니까? 인증 토큰이 만료되었는지 확인하는 다른 방법이 있습니까? 또는 내가 사용한대로 isAuthenticated()이라는 결과를 반환하는 방법으로 AsyncTask을 어떻게 구현할 수 있습니까?

안내해주세요.

감사합니다.

답변

1

당신은 당신은 4.0 장치 또는 HTTP의 conncetion가 응답하는 데 시간이 너무 오래 걸리는 경우 대부분의 아마이 오류를 가지고 있습니다 특히 TwitterLoginActivity

+0

+1 감사합니다! TwitterLoginActivity 코드에서 아이디어를 얻었습니다. 그리고 나는 내 일을했다. :) –

0

에서 여기 Zwitscher 와의 소스를 살펴있을 수 있습니다. 당신이 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에 대해서도이 권리를 얻는 것이 좋습니다. –