2012-03-15 3 views
0

내 안드로이드 앱을 통해 트위터에 트윗을 보내려고합니다. 내가 사용하고있는 라이브러리는 푯말 인 core, signpost commonshttp, jtwitter입니다.Android : OAuth 및 twitter를 사용하여 트윗을 올릴 수 없습니다.

public class MainActivity extends Activity implements View.OnClickListener { 
static final String TAG = "TweetExample"; 
private Twitter twitter; 
SharedPreferences prefs; 
private EditText textStatus; 
private static final String CONSUMER_KEY = "my key"; 
private static final String CONSUMER_SECRET = "my secret"; 
private static String ACCESS_KEY = null; 
private static String ACCESS_SECRET = null; 
private static final String REQUEST_URL = "http://twitter.com/oauth/request_token"; 
private static final String ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token"; 
private static final String AUTH_URL = "http://twitter.com/oauth/authorize"; 
private static final String CALLBACK_URL = "TweetExample://twitt"; 
private static CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
private static CommonsHttpOAuthProvider provider = new CommonsHttpOAuthProvider 
     (REQUEST_URL, ACCESS_TOKEN_URL, AUTH_URL); 

//Called when the activity is first created. 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Retrieve the shared preferences 
    prefs = getSharedPreferences(USER_PREFERENCES, 
    Context.MODE_PRIVATE); 

    // Find views by id 
    ImageView buttonUpdate = (ImageView) findViewById(R.id.ImageView_Update); 
    textStatus = (EditText) findViewById(R.id.textStatus); 
    ImageView btnLogin = (ImageView) findViewById(R.id.ImageView_Twit); 

    // Add listener 
    buttonUpdate.setOnClickListener(this); 
    btnLogin.setOnClickListener(this); 

    // Initialize preferences 
    prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    prefs.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) { 
      twitter = null; 
     } 
    }); 
} 

public void onClick(View v) { 

    switch(v.getId()){ 
    case R.id.ImageView_Update: 
     String status = textStatus.getText().toString(); 
     String message = "Status set to: " + status; 
     Log.d(TAG, message); 

     // Ignore empty updates 
     if (status.length() == 0) 
      return; 

     // Connect to twitter.com and update your status 
     try { 
      Log.d(TAG, "1"); 
      twitter.setStatus(status); 
      Log.d(TAG, "2"); 
     } catch (TwitterException e) { 
      Log.e(TAG, "Twitter exception: " + e); 
     } 
     Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
     break; 
    case R.id.ImageView_Twit: 
     try { 
      String authURL = provider.retrieveRequestToken(consumer, CALLBACK_URL); 
      Log.d(TAG, authURL); 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authURL))); 
     } catch (OAuthMessageSignerException e) { 
      e.printStackTrace(); 
     } catch (OAuthNotAuthorizedException e) { 
      e.printStackTrace(); 
     } catch (OAuthExpectationFailedException e) { 
      e.printStackTrace(); 
     } catch (OAuthCommunicationException e) { 
      e.printStackTrace(); 
     } 
     break; 
    } 
}  

@Override 
public void onResume() { 
    super.onResume(); 
    Uri uri = this.getIntent().getData(); 
    if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { 
     Log.d(TAG, uri.toString()); 
     String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); 
     Log.d(TAG, verifier); 
     try { 
      provider.retrieveAccessToken(consumer, verifier); 
      ACCESS_KEY = consumer.getToken(); 
      ACCESS_SECRET = consumer.getTokenSecret(); 
      Log.d(TAG, ACCESS_KEY); 
      Log.d(TAG, ACCESS_SECRET); 
     } catch (OAuthMessageSignerException e) { 
      e.printStackTrace(); 
     } catch (OAuthNotAuthorizedException e) { 
      e.printStackTrace(); 
     } catch (OAuthExpectationFailedException e) { 
      e.printStackTrace(); 
     } catch (OAuthCommunicationException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

나는 콜백 URL을 잘 알고 다음과 같이 내 주요 활동에 내 코드입니다. 푯말을 사용하여 인증하고 jtwitter를 사용하여 트윗하려고 할 수 있습니까? 지금은 앱에 권한을 부여하고 앱으로 리디렉션되도록 트위터에 로그인 할 수 있습니다. 그러나 트위터에 게시하려고 무언가를 입력하면 twitter.setStatus(status);

도와 주시면 감사하겠습니다.

답변

0

아마도 나는 눈이 멀었거나 코드를 포함하는 것을 잊어 버렸지 만 Twitter 객체가 생성되지 않은 것처럼 보입니다. 그래서 당신이 그것을 사용할 때 NullPointerException을 얻을 것이다.

OAuthSignpostClient oauthClient = new OAuthSignpostClient(app_token, app_secret, user_access_token, user_secret); 
Twitter twitter = new Twitter(null, oauthClient); 
:

어딘가에 당신의 라인을 따라 코드를 원하는