Android,Twitter4j,REST 1.1 - 如何完成OAuth流程?

时间:2013-07-31 01:19:24

标签: android twitter twitter-oauth twitter4j

自周末以来我一直在这里,我陷入了僵局。我对编程很陌生,并且怀疑自己是在脑海中,因为我已经阅读了“类似问题”下的每一个链接,它要么不适用,要么让我更加困惑。

我正在使用Twitter4j API,我从代码样本编号。 7在twitter4j网站上http://twitter4j.org/en/code-examples.html的OAuth支持。

作为一项技能培养项目,我想创建一个Android名人粉丝应用程序,它将从名人的公共帐户下载时间线。目标是执行所有推文的时间线下载。我不希望用户使用此应用程序登录Twitter或发布推文。该应用程序只是在后台下载时间轴并显示推文,可能在列表视图中。

我的代码没有执行以下行。它似乎只是挂在那里等待发生的事情。 RequestToken requestToken = twitter.getOAuthRequestToken();

我在清单中有互联网权限。在这一点上,我很困惑,我甚至不知道我是否正确注册了我的应用程序。我有四个密钥(消费者,消费者秘密,访问和访问密钥)。

设置

-Website:做了一些事情

- 申请类型:只读

-Callback URL:将其留空

- 我没有选择“使用Twitter登录。”

OAuth工具

- 请求类型:GET

- 请求URI:https://api.twitter.com/1/(可能是错误的)

这是我的代码:

public class TwitterActivity extends Activity
{
    Button mButtonTweets;
    String JSONString = null;
    TextView JSONContent;

class GetTwitterTimeline extends AsyncTask<Void, String, String>
{
    @Override
    protected String doInBackground(Void... params) 
    {   
        try
        {
            ConfigurationBuilder cb = new ConfigurationBuilder();
            cb.setDebugEnabled(true)
            .setOAuthConsumerKey("")
            .setOAuthConsumerSecret("")
            .setOAuthAccessToken("")
            .setOAuthAccessTokenSecret("");
            TwitterFactory tf = new TwitterFactory(cb.build());
            Twitter twitter = tf.getInstance();

            try
            {
                RequestToken requestToken = twitter.getOAuthRequestToken();

                AccessToken accessToken = null;

                while (accessToken == null)
                {
                    onProgressUpdate(requestToken.getAuthenticationURL());

                    try
                    {
                        accessToken = twitter.getOAuthAccessToken();
                    }//try
                    catch(TwitterException te)
                    {
                        if (te.getStatusCode() == 401)
                        {
                            onProgressUpdate("Unable to get the access token");
                        }//if
                        else
                        {
                            te.printStackTrace();
                        }//else
                    }//catch
                }//while
                onProgressUpdate("Got Access Token");
                onProgressUpdate("Access Token: " + accessToken.getToken());
                onProgressUpdate("Access Token Secret: " + accessToken.getTokenSecret());
            }//try
            catch (IllegalStateException ie)
            {
                if(!twitter.getAuthorization().isEnabled())
                {
                    onProgressUpdate("OAuth consumer key/secret is not set.");
                }//if
            }//catch
        }//try
        catch (TwitterException te)
        {
            te.printStackTrace();
            onProgressUpdate("Failed to get timeline");
        }//catch

        String JSONString = "JSON content will go here";

        return JSONString;
    }//doInBackground

    protected void onProgressUpdate(String logEntry)
    {
        Log.d("twitter4j", logEntry);
    }

    @Override
    protected void onPostExecute(String jsonString)
    {
        JSONString = jsonString;
    }

}//end inner class

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_twitter);

    new GetTwitterTimeline().execute();

    JSONContent = (TextView) findViewById(R.id.textview_tweets);

    mButtonTweets = (Button) findViewById(R.id.button_tweets);
    mButtonTweets.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            JSONContent.setText(JSONString);
        }
    });

}
}

1 个答案:

答案 0 :(得分:1)

Twitter API已更新。因此请求URI:https://api.twitter.com/1/ 将无效。

AFAIK也是你试图制作应用程序的方式无法解决的问题。您需要某种身份验证。在此API更改后,我还转储了我的一个应用程序。 :(

阅读以下链接:

https://dev.twitter.com/docs/api/1.1/overview