我试图使用已在回调中填充的推文的arraylist,但我无法弄清楚如何返回构建的列表。每当我尝试使用构建的列表时,它都是空的。
我从这个post
获得了一些代码public ArrayList<Tweet> tweetList() {
final ArrayList<Tweet> tweets = new ArrayList<>();
final UserTimeline userTimeline = new UserTimeline.Builder()
.screenName("xxxxxxxx")
.build();
userTimeline.next(null, new Callback<TimelineResult<Tweet>>() {
@Override
public void success(Result<TimelineResult<Tweet>> result) {
for(Tweet tweet : result.data.items){
tweets.add(tweet);
}
Log.d("Finished Tweet List", String.valueOf(tweets));
// when this is printed I can see the ArrayList and all tweets are there
}
@Override
public void failure(TwitterException exception) {
exception.printStackTrace();
}
});
Log.d("Tweet list returned", String.valueOf(tweets));
// the value of tweets is empty here for some reason
return tweets;
}
答案 0 :(得分:1)
您可以修改您的方法,而不是返回ArrayList
的空Tweet
,以便在{{1}的响应时更新ArrayList
Tweet
个Callback
成功。
所以我建议修改你的方法如下:
private ArrayList<Tweet> tweetList = new ArrayList<>();
public void tweetList() {
final ArrayList<Tweet> tweets = new ArrayList<>();
final UserTimeline userTimeline = new UserTimeline.Builder()
.screenName("xxxxxxxx")
.build();
userTimeline.next(null, new Callback<TimelineResult<Tweet>>() {
@Override
public void success(Result<TimelineResult<Tweet>> result) {
for(Tweet tweet : result.data.items){
tweets.add(tweet);
}
this.tweetList = tweets;
// execute the next sequence of instructions in your program here
// and make use of tweetList instead of tweets
}
@Override
public void failure(TwitterException exception) {
exception.printStackTrace();
}
});
}
答案 1 :(得分:0)
当然,推文的价值在这里是空的!
函数userTimeline.next(null, new Callback<TimelineResult<Tweet>>()
不在主线程上执行(它是异步任务)。
因此,在return tweets
填充之前调用ArrayList<Tweets> tweets
。
您只能在
列表中执行操作@Override
public void success(Result<TimelineResult<Tweet>> result) {
//do whatever with your list here !
}
希望我能说清楚!