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

xminus 发布于 2019-04-15 android 最后更新 2019-04-15 22:59 27 浏览

我试图用Twitter4j检索状态,但是我得到一个不幸的TestProject已停止错误,我的应用程序关闭。我也没有得到任何logcat,所以我不知道从哪里开始排除故障。 这是按下按钮时执行的方法,我基本上创建了一个包含所有oAuth设置和针对twitter状态的调用的类的实例。我知道这应该可以通过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错误或其他类型的错误,而我没有收到任何错误。
已邀请:

uharum

赞同来自:

问题是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自动选择了一个过滤器,当我选择“所有消息(没有过滤器)”选项时,我能够看到堆栈跟踪。 logcat filter