めんどくさいので、TwitterWrapperというクラスを作りました。
設定値は、Valuesというクラスに入れてあります。(手抜き
ステップは4つ
1)twitter4jのjarファイルをビルドパスに追加。
2)設定用のValuesクラスを用意。
3)TwitterWrapperを用意。
4)Activityにメソッドを記述。
1)twitter4jのjarファイルをビルドパスに追加。
これは適当にどこか見てみてください。
こことか。JavaでTwitterをOAuth認証して使えるTwitter4jとは
Versionは、twitter4j-android-2.2.1-SNAPSHOT.zip を使用しました。
他必要なライブラリは、oauth-signpost で、signpost-commonshttp4-1.2.1.1.jar とsignpost-core-1.2.1.1.jarです。
2)設定用のValuesクラスを用意。
設定用のValuesクラス
- public class Values {
- public static final String TWITTER_SCREEN_NAME = "じぶんのアカウント";
- public static final String TWITTER_CONSUMER_KEY = "自分のConsumerKey";
- public static final String TWITTER_CONSUMER_SECRET = "自分のConsumerSecret";
- public static final String TWITTER_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token";
- public static final String TWITTER_AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize";
- public static final String TWITTER_CALLBACK_URL = "http://てけとうに自分のサイト/";
- public static final String TWITTER_PREFERENCE_NAME = "おすきに";
- public static final String TWITTER_ID_KEY = "screen_name";
- public static final String TWITTER_TOKEN_KEY = "token";
- public static final String TWITTER_TOKEN_SECRET_KEY = "tokenSecret";
- public static final String TWITTER_ACCESS_TOKEN_KEY = "accessToken";
- }
3)TwitterWrapperを用意。
インポート文
- import twitter4j.Query;
- import twitter4j.QueryResult;
- import twitter4j.Tweet;
- import twitter4j.Twitter;
- import twitter4j.TwitterException;
- import twitter4j.TwitterFactory;
- import twitter4j.User;
- import twitter4j.conf.Configuration;
- import twitter4j.conf.ConfigurationBuilder;
- import twitter4j.http.AccessToken;
- import twitter4j.http.OAuthAuthorization;
- import java.util.List;
- import android.app.Activity;
- import android.content.SharedPreferences;
- import android.util.Log;
- import android.widget.EditText;
- // リソースファイルがわり。
- import jp.mediba.android.util.Values;
クラス
- public class TwitterWrapper {
- Twitter twitter;
- public TwitterWrapper() {
- // do nothing
- }
- public TwitterWrapper(Twitter twitter) {
- this.twitter = twitter;
- }
- public Twitter getTwitter() {
- return twitter;
- }
- public void setTwitter(Twitter twitter) {
- this.twitter = twitter;
- }
- /**
- * Usage: java twitter4j.examples.search.SearchTweets [query]
- */
- public List<tweet> searchTweet() {
- String str = Values.TWITTER_HASHTAG;
- Twitter twitter = new TwitterFactory().getInstance();
- try {
- Query query = new Query(str);
- query.setRpp(30);
- QueryResult result = twitter.search(query);
- List<tweet> tweets = result.getTweets();
- return tweets;
- } catch (TwitterException te) {
- te.printStackTrace();
- Log.w("TWT", "Failed to search tweets: " + te.getMessage());
- }
- return null;
- }
- public void authorization(Activity act) throws TwitterException {
- ConfigurationBuilder builder =
- new ConfigurationBuilder();
- builder.setOAuthConsumerKey(Values.TWITTER_CONSUMER_KEY);
- builder.setOAuthConsumerSecret(Values.TWITTER_CONSUMER_SECRET);
- TwitterFactory factory = new TwitterFactory(builder.build());
- String screen_name =
- ((EditText)act.findViewById(R.id.txtScreenName)).getText().toString();
- String password =
- ((EditText)act.findViewById(R.id.txtPassword)).getText().toString();
- Twitter twitter = factory.getInstance(screen_name,password);
- AccessToken accessToken = null;
- try {
- accessToken = twitter.getOAuthAccessToken();
- String token = accessToken.getToken();
- String tokenSecret = accessToken.getTokenSecret();
- SharedPreferences pref =
- act.getSharedPreferences(
- Values.TWITTER_PREFERENCE_NAME,
- Activity.MODE_PRIVATE);
- SharedPreferences.Editor editor = pref.edit();
- editor.putString(Values.TWITTER_TOKEN_KEY,token);
- editor.putString(Values.TWITTER_TOKEN_SECRET_KEY,tokenSecret);
- editor.putString(Values.TWITTER_ID_KEY,screen_name);
- editor.commit();
- } catch (TwitterException e) {
- e.printStackTrace();
- throw e;
- }
- }
- public Twitter getAuthorizedTwitter(Activity act) {
- SharedPreferences settings =
- act.getSharedPreferences(Values.TWITTER_PREFERENCE_NAME, 0);
- String token = settings.getString(Values.TWITTER_TOKEN_KEY,"NONE");
- String tokenSecret = settings.getString(Values.TWITTER_TOKEN_SECRET_KEY,"NONE");
- Twitter twitter = new TwitterFactory().getInstance();
- if(twitter.getAuthorization().isEnabled()){
- return twitter;
- } else {
- ConfigurationBuilder builder = new ConfigurationBuilder();
- builder.setOAuthConsumerKey(Values.TWITTER_CONSUMER_KEY);
- builder.setOAuthConsumerSecret(Values.TWITTER_CONSUMER_SECRET);
- builder.setOAuthAccessToken(token);
- builder.setOAuthAccessTokenSecret(tokenSecret);
- Configuration configuration = builder.build();
- TwitterFactory factory = new TwitterFactory();
- try {
- twitter = factory.getInstance(new OAuthAuthorization(configuration));
- } catch (java.lang.StringIndexOutOfBoundsException e) {
- return null;
- }
- if(twitter.getAuthorization().isEnabled()){
- return twitter;
- } else {
- return null;
- }
- }
- }
- }
4)Activityにメソッドを記述。
Activityに以下のメソッドを書きます。
インポート文
- import twitter4j.TwitterException;
- import jp.mediba.android.util.TwitterWrapper;
Activityに以下のメソッドを書き、ボタンに結びつけます。
- public void pushAuth(View v) {
- TwitterWrapper tw = new TwitterWrapper();
- AlertDialog.Builder abuilder = new AlertDialog.Builder(this);
- try {
- // ActivityそのものをTwitterWrapperに渡しています。
- tw.authorization(this);
- // 設定が完了したら、ダイアログを出す。
- abuilder.setMessage( R.string.dialog_api_twitter_setting_done_title )
- .setCancelable(false)
- .setPositiveButton( R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- // ダイアログのOKをおしたら、別画面に遷移。
- goTweet();
- }
- });
- } catch (TwitterException e) {
- e.printStackTrace();
- // なんかエラーが起きたら、ダイアログを出す。
- abuilder.setMessage( R.string.error_api_twitter_login )
- .setCancelable(false)
- .setPositiveButton( R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
- }
- AlertDialog alert = abuilder.create();
- alert.show();
- }
- // 遷移したいActivityをセットして、画面遷移するロジックは外出ししておく。
- public void goTweet() {
- Intent intent = new Intent(this, ActTweet.class);
- startActivity(intent);
- finish();
- }