山本様
早速のお返事ありがとうございます。
私もandroidのライフサイクルをあまり理解していませんのでなんともいえないです。。
アドバイス頂いたように、twitter4j.propertiesで書いてみました。
コールバックURLもコードから指定せず、twitter公式のアプリケーション設定から指定するように変更してみました。
またしても、エミュレーターでは例外は発生せず実機では発生しました。
素人なもので時間はかかりますがRequestTokenも保持するように出来ないか試行錯誤してみます。
■ソース
public void executeOAAuth(){
try {
requesttoken = twitter.getOAuthRequestToken();
String url = requesttoken.getAuthorizationURL();
Intent i = new Intent(this, OauthV.class);
i.putExtra("auth_url", url);
// アクティビティを起動。
// REQUEST_CODEは任意(0<)なint型の値。
this.startActivityForResult(i,0);
} catch (TwitterException e) {
e.printStackTrace();
Log.d("twitter", e.toString());
}
}
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (resultCode == RESULT_OK){
// インテントからoauth_verifierを取り出して、
// access_tokenとaccess_token_secretを取得する。
AccessToken token = null;
String verifier = intent.getExtras().getString("oauth_verifier");
try {
Log.d("test",verifier);
token = twitter.getOAuthAccessToken(requesttoken, verifier);//ここでエ
ラー
}
catch (TwitterException e) {
e.printStackTrace();
setResult(RESULT_CANCELED);
finish();
}
String atokenStr = token.getToken();
String atokenStrSec = token.getTokenSecret();
//プレファレンスにトークン情報を書き込み
SharedPreferences preferences =
getSharedPreferences( getString(R.string.preferences_name),
MODE_PRIVATE);
SharedPreferences.Editor editor=preferences.edit();
editor.putString("oauth_token",atokenStr);
editor.putString("oauth_token_secret",atokenStrSec);
editor.commit();
}
else{
setResult(RESULT_CANCELED);
finish();
}
// 設定おしまい。
setResult(RESULT_OK);
finish();
}
}
■ログ
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): FATAL EXCEPTION: main
03-05 18:12:12.515: ERROR/AndroidRuntime(14827):
java.lang.RuntimeException: Unable to resume activity {com.twittertest/
com.twittertest.OLoginB}: java.lang.RuntimeException: Failure
delivering result ResultInfo{who=null, request=0, result=-1,
data=Intent { cmp=com.twittertest/.OauthV (has extras) }} to activity
{com.twittertest/com.twittertest.OLoginB}:
java.lang.IllegalStateException: No Token available.
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.performResumeActivity(ActivityThread.java:
3128)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:
3143)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:
2684)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.os.Handler.dispatchMessage(Handler.java:99)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.os.Looper.loop(Looper.java:123)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.main(ActivityThread.java:4627)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
java.lang.reflect.Method.invokeNative(Native Method)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
java.lang.reflect.Method.invoke(Method.java:521)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:858)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
dalvik.system.NativeStart.main(Native Method)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): Caused by:
java.lang.RuntimeException: Failure delivering result
ResultInfo{who=null, request=0, result=-1, data=Intent
{ cmp=com.twittertest/.OauthV (has extras) }} to activity
{com.twittertest/com.twittertest.OLoginB}:
java.lang.IllegalStateException: No Token available.
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.performResumeActivity(ActivityThread.java:
3115)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): ... 12 more
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): Caused by:
java.lang.IllegalStateException: No Token available.
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
twitter4j.auth.OAuthAuthorization.ensureTokenIsAvailable(OAuthAuthorization.java:
80)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:
128)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:
147)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
twitter4j.TwitterBaseImpl.getOAuthAccessToken(TwitterBaseImpl.java:
342)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
com.twittertest.OLoginB.onActivityResult(OLoginB.java:74)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.Activity.dispatchActivityResult(Activity.java:3890)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): at
android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
03-05 18:12:12.515: ERROR/AndroidRuntime(14827): ... 13 more
他にもお気づきの点がある方がおられましたらコメントをよろしくお願いいたします。