2017-01-20 5 views
0

私はコールバックの中に埋め込まれたツイートのarraylistを使用しようとしていますが、ビルドされたリストを返す方法を理解できません。ビルドされたリストを使用しようとするたびに、それは空です。 返されたarraylistがコールバックの中に埋め込まれています

私は、あなたが Callbackからの応答が成功したときに別の ArrayList TweetのSが更新され、あなたの方法を変更することができる代わりに、空の ArrayList TweetのSを返すのこの 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; 
} 
+1

情報がコールバック経由で返されるため、メソッドが非同期であると推測しています。その場合、あなたのメソッドはインターネットにアクセスし、そのコールバックが起動する前に戻る別のスレッドを開始しています。あなたがしたい仕事をコールバックの中に入れ、情報が適切に配信されたことを確認します。 –

答えて

0

からいくつかのコードを得ました。

は、だから私は、次のようにあなたの方法を修正することをお勧め:

もちろん
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(); 
     } 
    }); 
} 
0

、つぶやきの値は、ここでは空です! 関数userTimeline.next(null, new Callback<TimelineResult<Tweet>>()は、メインスレッドでは実行されません(非同期タスクです)。 ArrayList<Tweets> tweetsが入力される前にreturn tweetsが呼び出されます。

あなただけ

@Override 
public void success(Result<TimelineResult<Tweet>> result) { 
    //do whatever with your list here ! 
} 

であなたのリスト上の操作を行うことができますが、私は明らかにされているいただければ幸いです!

関連する問題