0

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 
4

1 に答える 1

1

Twitter API は、あなたが既に行ったツイートと一致するツイートを拒否します。古いツイートが「期限切れ」になることはないと思います。

于 2011-08-08T23:00:05.010 に答える