Twitter4J (2.1.0) を使用してツイートを更新しようとしています。コードの何が問題なのかわかりません。
特に私の問題は次のとおりです。
(a) すべてのツイートが正常に投稿されるわけではありません。-1 のエラー コードが表示されることがよくあります。グーグルグループの投稿によると...
内部 http コンポーネントが API への接続または API からの読み取りに失敗すると、コード -1 が返されます。DNS 関連の問題が原因で API が JVM から到達できない場合にも、コード -1 が返されることがあります。
奇妙なことに、私はこれをほぼ毎秒投稿しているように見えました。-1 エラー コードを受け取るたびにこれに対処するために、もう一度更新を試みます。これはあまり良い解決策ではないことはわかっていますが。これにより、95%の確率で問題が修正されました
(b) 新しいツイートが古いツイートと一致するたびに重複エラー (エラー コード 403) が表示される
エラー コード 403 は、複製が古くなっている場合でも発生します (たとえば、"Hello there" を投稿し、さまざまなステータスの更新を投稿してから、"Hello there" を投稿すると、エラー コード 403 で TwitterException が再びスローされます)。
私の現在のコード...
私のコードは AsyncTask にあり、これは (アクティビティではなく) Service にあります。以下に、Asynctask コードと別のメソッドを含めました。
class SendTwitAsyncTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
String tokenTwit = params[0];
String tokenSecretTwit = params[1];
String strMessageBody = params[2];
AccessToken aToken = new AccessToken(tokenTwit, tokenSecretTwit);
// initialize Twitter4J
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
twitter.setOAuthAccessToken(aToken);
// create a tweet
// strMessageBody varies
String tweet = strMessageBody;
boolean bool = twitter.isOAuthEnabled();
if (twitter.isOAuthEnabled()) {
GeoLocation geolocation = new GeoLocation(-33.91, 151.25);
try {
twitter.updateStatus(tweet, geolocation);
showNotification("Twitter One" , TWIT_SUCCESS);
} catch (TwitterException te) {
if (te.getStatusCode() == -1) {
//try again
try {
twitter.updateStatus(tweet, geolocation);
showNotification("Twitter Two ", TWIT_SUCCESS);
}
catch (TwitterException tetwo) {
describeTwitException(tetwo.getStatusCode());
}
} //end if
//else exception other than -1
else {
describeTwitException(te.getStatusCode());
} //end else
}// end outer catch
} //end if
else {
showNotification("Unable to authenticate" , TWIT_FAIL);
}//
return null;
}
} //end class SendTwitAsyncTask
public void describeTwitException(int twitExceptionCode) {
switch (twitExceptionCode) {
case (-1):
showNotification("Twitter (unable to connect)", TWIT_FAIL);
break;
case(403):
showNotification("Twitter (duplicate tweet)", TWIT_FAIL);
break;
default:
showNotification("Twitter", TWIT_FAIL);
} //end switch
} //end describeTwitException method