返回arraylist填充回调内部

时间:2017-01-20 21:04:56

标签: java android arraylist twitter

我试图使用已在回调中填充的推文的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;
}

2 个答案:

答案 0 :(得分:1)

您可以修改您的方法,而不是返回ArrayList的空Tweet,以便在{{1}的响应时更新ArrayList TweetCallback成功。

所以我建议修改你的方法如下:

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 !
}

希望我能说清楚!