めんどくさいので、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(); }