2013-02-17 2 views
0

안드로이드에 대한 jTwitter를 사용하여 내 응용 프로그램을 개발하고 있습니다. 인증 페이지로 사용자를 리디렉션 할 수 있습니다. 승인 페이지에서 사용자는 앱 인증을위한 자격 증명을 입력 할 수 있습니다. 그런 다음 콜백 함수가 호출됩니다. 콜백 함수에서 액세스 토큰을 가져올 수 없습니다. 그것은 예외를 던지고있다. 친절하게 도와주세요.안드로이드에 대한 jTwitter와 액세스 토큰을 받고

"서비스 공급자와 통신에 실패했습니다"예외가 발생합니다. 업데이트 : 토큰을 받고 있지만 여전히 예외가 발생합니다.

Twitter twitter = null; 
private EditText tweetTxt = null; 
private Button postBtn = null; 

private OAuthSignpostClient client = null; 
private String CALLBACK_URI = "myapp://twitt"; 

private String authUrl = null; 
private ProgressDialog postDialog = null; 
String[] accessTokenandSecret=null; 
String consumerKey=""; 
String consumerSecret=""; 
String verifier; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    postBtn=(Button)findViewById(R.id.button1); 




    postBtn.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      new MyTask().execute(); 

     } 
    }); 


    Button postTweet = (Button)findViewById(R.id.button2); 
    postTweet.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      new PostTweet().execute(); 
     } 
    }); 

} 


private class PostTweet extends AsyncTask<Void, Void, Void> { 


    protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), "pre execute 2", Toast.LENGTH_LONG).show(); 
     if(accessTokenandSecret==null) 
     { 
      Toast.makeText(getApplicationContext(), "IT IS NULL", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     client=new OAuthSignpostClient(consumerKey, consumerSecret, accessTokenandSecret[0], accessTokenandSecret[1]); 
     Twitter jtwit = new Twitter(null, client); 
     jtwit.setStatus("test post from my app"); 


     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     Toast.makeText(getApplicationContext(), "Tweet is post Successfully!!", Toast.LENGTH_SHORT).show(); 
    } 



} 






private class MyTask extends AsyncTask<Void, Void, Void> { 


    protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), "pre execute", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     client = new OAuthSignpostClient("QvkiReKCHNKcHn3pGrEzQ" ,"EV9vdMRfuT2AQlSNPJW4LhDAyOe0z1mAZYqHJNkPH7g", CALLBACK_URI); 

     authUrl = client.authorizeUrl().toString(); 
     Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     getApplicationContext().startActivity(intent); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     Toast.makeText(getApplicationContext(), "post execute", Toast.LENGTH_LONG).show(); 
    } 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

protected void onNewIntent(Intent intent) { 

    super.onNewIntent(intent); 
    Uri uri = intent.getData(); 
    //Check if you got NewIntent event due to Twitter Call back only 

    if (uri != null && uri.toString().startsWith(CALLBACK_URI)) 
    { 
    try 
    { 
    verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); 
    Toast.makeText(getApplicationContext(), "inside verfier", Toast.LENGTH_LONG).show(); 

    client.setAuthorizationCode(verifier); 

    accessTokenandSecret=client.getAccessToken(); 

    //if(accessTokenandSecret==null) 
     //{ 
     //Toast.makeText(getApplicationContext(), "it is null you fool", Toast.LENGTH_LONG).show(); 
    // } 


    //client=new OAuthSignpostClient(consumerKey, consumerSecret, accessTokenandSecret); 
    } 
    catch(Exception e){ 
    Log.d("exception", " "+e.getMessage()); 
    } 
    }} 

로그 고양이 오류 :

  02-17 15:13:46.599: E/AndroidRuntime(12915): FATAL EXCEPTION: AsyncTask #4 
     02-17 15:13:46.599: E/AndroidRuntime(12915): java.lang.RuntimeException: An error occured while executing doInBackground() 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at java.lang.Thread.run(Thread.java:856) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): Caused by: winterwell.jtwitter.TwitterException: oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: http://twitter.com/oauth/access_token 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at winterwell.jtwitter.OAuthSignpostClient.setAuthorizationCode(OAuthSignpostClient.java:431) 
     02-17 15:13:46.599: E/AndroidRuntime(12915): at com.example.retrieve.contacts.twitter.MainActivity$GetAccessTok.doInBackground(MainActivity.java:114) 

답변

1

당신이 http://winterwell.com/software/jtwitter.php에서 JTwitter의 최신 버전을 다운로드 시도 할 수 여기에 코드인가? AndroidTwitterLogin에 callback-url이 사용되지 않은 버그가있었습니다. 이제 패치되었습니다.

그런데 - 웹에 앱의 oauth 세부 정보를 게시하는 것에주의하십시오. 앱이 작동하면 dev.twitter.com으로 이동하여 새로운 세부 정보를 생성하는 것이 좋습니다.