在Android上使用twitter4j从Twitter获取状态

时间:2013-11-20 03:30:58

标签: android twitter twitter4j

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

这是按下按钮时执行的方法,我基本上创建了一个类的实例,其中包含所有oAuth设置和对twitter API的状态调用。我知道这应该可以通过Async调用来完成,因为它处理网络,但是现在我只想检索一个状态,即使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错误或其他类型的错误,而我没有收到任何错误。

1 个答案:

答案 0 :(得分:0)

问题是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没有显示异常的另一个问题是,当我选择了选项&#34;所有消息(没有过滤器)&#34;时,Eclipse自动选择了一个过滤器。我能够看到堆栈跟踪。

logcat filter