0

私は twitter4j と Android で遊んでいますが、これまでのところとても良いです。ただし、リスト ビューでツイートを適切に表示する方法を理解するのに問題があります。これまでのコードは、Twitter4j Web サイトで提供されているコード例に基づいています。

public class MainActivity extends Activity {
//ListView with the tweets
private ListView timelineListView; 

// Alert Dialog Manager
AlertDialogManager alert = new AlertDialogManager();

//Adapter
ArrayAdapter<twitter4j.Status> tweetAdapter ;  

//List
List<Status> rawStatuses;

//Other stuff
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_main);
//Login methods, checking that there is an Internet connection, etc... When a button is
//pressed, an Asynctask is called and it retrieves the tweets:


class updateTimeline extends AsyncTask <Void, Void, Void>{

    protected void onPreExecute(Void thing){

    }

    protected Void doInBackground(Void... arg0) {           
        try {
            ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
            builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);

            // Access Token
            String access_token = mSharedPreferences.getString(PREF_KEY_OAUTH_TOKEN, "");
            // Access Token Secret
            String access_token_secret = mSharedPreferences.getString(PREF_KEY_OAUTH_SECRET, "");

            AccessToken accessToken = new AccessToken(access_token, access_token_secret);
            Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken);
            User user = twitter.verifyCredentials();

            rawStatuses = twitter.getHomeTimeline();


            System.out.println("Showing @" + user.getScreenName() + "'s home timeline.");
            for (twitter4j.Status status : rawStatuses) {
                System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
                }

        } catch (TwitterException te) {
            te.printStackTrace();
            System.out.println("Failed to get timeline: " + te.getMessage());
            //System.exit(-1);
        }
        return null;
    }




    protected void onPostExecute(Void result) {
        // dismiss the dialog after getting all products
        //pDialog.dismiss();

        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
            Toast.makeText(getApplicationContext(),
                        "Timeline updated", Toast.LENGTH_SHORT)
                        .show();    
            tweetAdapter = new ArrayAdapter<twitter4j.Status>(MainActivity.this, android.R.layout.simple_list_item_1, rawStatuses);
            timelineListView.setAdapter(tweetAdapter);
            }

        });
    }

最後の 20 件程度のツイートを正常に取得します。しかし、私の問題は、基本的にすべての情報を画面に出力するため、リスト rawStatuses をアダプターと listView にバインドする最後の部分から発生します。

つぶやき

わかりました、すべての情報が有用または必要になるわけではありませんが、そこにはあります。また、たとえば、listView に Twitter ハンドルとツイートのみを表示する方法がわかりません (つまり、リスト rawStatuses からその情報を適切に抽出します)。最も有用な情報 (: のようなもの List <User, Tweet, ID, Time>) を含むリストを用意することを考えましたが、面倒で非常に貧弱な解決策のように思えます。

私の質問は次のとおりです。ツイートに含まれるすべての情報 (多数のツイート) を管理するにはどうすればよいですか? 私が見つけた最も近い答えはthis answerですが、指定されたリンクはもう機能しません。

私は自分自身を説明したことを願っています。前もって感謝します。

4

1 に答える 1

0

私は同じ問題に直面していましたが、実際にはここで正しい道を進んでいます。これを解決するために私がしたことは、文字列のリストを作成し、それを ArrayList に格納してから、そのリストを生のステータスではなく ArrayAdapter に入れることでした:

ArrayAdapter<String> stringTweetAdapter;
List<twitter4j.Status> statuses;
List<String> stringStatuses = new ArrayList<String>();

.....


User user = twitter.verifyCredentials();
statuses = twitter.getHomeTimeline();
System.out.println("Showing @" + user.getScreenName() + "'s home timeline.");
for (twitter4j.Status status : statuses) {
 Log.d("Twitter","@" + status.getUser().getScreenName() + " - " + status.getText());
 String myTweets = ("@" + status.getUser().getScreenName() + " - " + status.getText());
                stringStatuses.add(myTweets);
 }

......

protected void onPostExecute(String file_url) {
 // dismiss the dialog after getting all products
 progressDialog.dismiss();
 // updating UI from Background Thread
 runOnUiThread(new Runnable() {
  @Override
  public void run() {
    Toast.makeText(getApplicationContext(),"Retrieving TimeLine Done..", Toast.LENGTH_SHORT).show();
    stringTweetAdapter = new ArrayAdapter<String>(ShowTimeline.this, R.layout.timeline_list_item, R.id.textTimelineItem, stringStatuses);
    twitterFeed.setAdapter(stringTweetAdapter);
    }
   });
  }
于 2013-09-20T17:07:34.110 に答える