【问题标题】:getting Status from Twitter using twitter4j on Android在 Android 上使用 twitter4j 从 Twitter 获取状态
【发布时间】:2013-11-20 03:30:58
【问题描述】:

我正在尝试使用 Twitter4j 检索状态,但我得到了一个不幸的 TestProject 已停止错误并且我的应用程序关闭。我在 logcat 中也没有得到任何东西,所以我不知道从哪里开始进行故障排除。

这是按下按钮时执行的方法,我基本上是在创建一个类的实例,其中包含所有 oAuth 设置和对 twitter API 的状态调用。我知道这可能应该通过异步调用来完成,因为它处理网络,但现在我只想检索一个状态,即使 UI 被阻止:

    public void onGetStatus(View v){

    if(v.getId()==R.id.button1){



        GetUserStatus status = new GetUserStatus();
        ResponseList<Status> a = status.twitterSettings();

        for(Status s: a){
        editText.setText(s.getText());

        }

    }

}

这是包含我帐户的所有 Twitter 配置的类。

public class GetUserStatus {



public ResponseList<Status> twitterSettings(){

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setDebugEnabled(true);
  cb.setOAuthConsumerKey("xxxxxx");
  cb.setOAuthConsumerSecret("xxxx");
  cb.setOAuthAccessToken("xxxxx");
  cb.setOAuthAccessTokenSecret("xxxx");



TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();


try {
    ResponseList<Status> a = twitter.getUserTimeline(new Paging(1,5));

    return  a;


} catch (TwitterException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();


}
return null;





}

}

我所做的研究

我大部分时间都离开了 twitter4j 的网站code examples,而且似乎一切都是最新的,所以我不认为 twitter4j 已被弃用。我还查看了 StackOverflow.com 上的其他 twitter4j 问题,但大多数处理 404 错误或其他类型的错误,而我没有收到任何错误。

【问题讨论】:

  • 您是否检查过该用户是否仍然存在并可从 twitter.com UI 访问?用户帐户可能会以某种方式被暂停、删除或保护。确保这一点。

标签: android twitter twitter4j


【解决方案1】:

问题是 StrictMode.ThreadPolicy 从 API 级别 9 开始引入,并且默认线程策略从 API 级别 11 开始更改,简而言之,不允许网络操作

(例如:HttpClient 和 HttpUrlConnection)在 UI 线程上执行。如果你这样做,你会得到 NetworkOnMainThreadException。

使用 AsyncTask 解决了这个问题。我在我的活动中添加了一个嵌套类

class GetUserStatus extends AsyncTask < Void, Void, ResponseList < twitter4j.Status >> {

        @
        Override
        protected ResponseList < twitter4j.Status > doInBackground(Void...params) {


            ConfigurationBuilder cb = new ConfigurationBuilder();
            cb.setDebugEnabled(true);
            cb.setOAuthConsumerKey("XXXX");
            cb.setOAuthConsumerSecret("XXXXX");
            cb.setOAuthAccessToken("XXXXX");
            cb.setOAuthAccessTokenSecret("XXXXXXX");




            TwitterFactory tf = new TwitterFactory(cb.build());
            Twitter twitter = tf.getInstance();



            try {
                ResponseList < twitter4j.Status > a = twitter.getUserTimeline(new Paging(1, 5));


                return a;

            } catch (TwitterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }




            return null;
        }


        protected void onPostExecute(ResponseList < twitter4j.Status > stats) {

            for (twitter4j.Status a: stats) {

                editText.setText(a.getText());



            }

        }




    }

我遇到的另一个 logcat 不显示异常的问题是因为 Eclipse 自动选择了一个过滤器,当我选择“所有消息(无过滤器)”选项时,我能够看到堆栈跟踪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多