我正在尝试使用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错误或其他类型的错误,而我没有收到任何错误。
答案 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自动选择了一个过滤器。我能够看到堆栈跟踪。