如何使用Twitter 4J更新推文?

时间:2011-08-08 12:38:54

标签: android twitter4j

我正在使用Twitter4J(2.1.0)尝试更新推文。我无法弄清楚我的代码有什么问题。

特别是我的问题是:

(a)并非所有推文都成功发布。我经常得到-1的错误代码。根据谷歌小组post ...

  

当内部http组件无法连接时,您获得代码-1   或者从API中读取。 API可能也会获得代码-1   由于DNS相关问题,无法从JVM无法访问。

奇怪的是,我似乎每隔一秒就会得到这个。为了处理这个,每当我收到-1错误代码,我会尝试再次更新。虽然我意识到这不是一个很好的解决方案。这样可以在95%的时间内修复探测器

(b)每当新推文与任何旧推文匹配时,我都会收到重复错误(错误代码403)

错误代码403即使副本现已过时也会发生(例如发布“Hello there”,发布各种状态更新,然后发布“Hello there”再次抛出一个错误代码为403的TwitterException)

我当前的代码......

我的代码位于AsyncTask中,而AsyncTask又是Service(而不是activity)。我已经包含了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 

1 个答案:

答案 0 :(得分:1)

Twitter API将拒绝任何与您已经发布的推文相匹配的推文。我不认为旧的推文会“过期”。