0

と呼ばれるリストがstatussesあり、その中には と呼ばれるツイートである必要なテキストがありますstatus。ステータスを に設定したいlistview

public class MainActivity extends Activity {

    ListView i;
    List<Status> statusess;
    ConfigurationBuilder cb;
    twitter4j.Status status3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        i = (ListView) findViewById(R.id.listView1);

        new LongOperation().execute("");

        }

private class LongOperation extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {

        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();

        String[] srch = new String[] {"Obama"};
        ResponseList<User> users = null;
        try {
            users = twitter.lookupUsers(srch);
        } catch (TwitterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (User user : users) {
          System.out.println("Friend's Name " + user.getName()); // this print my friends name
              if (user.getStatus() != null) 
              {
              System.out.println("Friend timeline");
              try {
                statusess = twitter.getUserTimeline(user.getName());
            } catch (TwitterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
              for (twitter4j.Status status3 : statusess) 
               {
                      System.out.println(status3.getText());
               }
              }
        }  


            return null;
    }        

    @Override
    protected void onPostExecute(String result) {    

    }

    @Override
    protected void onPreExecute() { 
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}

これ System.out.println(status3.getText());で 100% 動作し、ツイートは に表示されますconsole。しかし、どうすればそれらを中に入れることができますlistviewonPostExecute

私は試した

i.setAdapter(new ArrayAdapter<twitter4j.Status>(MainActivity.this,
        android.R.layout.simple_list_item_1, statusess));

しかし、私は必要のない多くのテキストを取得します.text(tweet)であるstatus3だけが必要です.これは、ツイートID、リツイート、フォロワーなどの多くのものを表示します..

私もこれを試しました

@Override
protected void onPostExecute(String result) {    
    for (twitter4j.Status status3 : statusess) 
    {
    i.setAdapter(new ArrayAdapter<statusess>(MainActivity.this,
            android.R.layout.simple_list_item_1, status3.getText()));
    }
}

しかし、うまくいきませんでした。赤い線がたくさんあります xD

4

2 に答える 2

2
users = twitter.lookupUsers(srch);

これにより、ユーザーのリストが表示されます。forループを実行してリストを反復処理し、statuses反復ごとに変更しています。for ループが終了すると、最後のstatusesユーザーのステータス リスト ( によって返されるtwitter.getUserTimeline(user.getName())) を保持します。これは本当にあなたが望むものですか?

たとえば、 を使用して返されたユーザー リストをtwitter.lookupUsers(srch)ListView に表示できます。また、アイテムのクリック イベントで、そのユーザーのステータス リストを表示します。

userステータス リストが必要なユーザーを決定したら、次の操作を行います。

// Declare an ArrayList with class scope
ArrayList<String> statusListTextOnly;

// Initialize it in doInBackground()
@Override
protected String doInBackground(String... params) {
    ....
    ....
    statusListTextOnly = new ArrayList<String>();

    // Initialize 'statuses' for the user that you have decided on
    statusess = twitter.getUserTimeline(user.getName());

    // Run a for-loop to fill 'statusListTextOnly'
    // We will use 'statusListTextOnly' with the ArrayAdapter
    for (twitter4j.Status status3 : statusess) {
        statusListTextOnly.add(status3.getText());
    }
}

// Initialize/reset ArrayAdapter
@Override
protected void onPostExecute(String result) {
    i.setAdapter(new ArrayAdapter<String>(MainActivity.this,
    android.R.layout.simple_list_item_1, statusListTextOnly));
}

あなたのコードの問題はここにあります:

i.setAdapter(new ArrayAdapter<twitter4j.Status>(MainActivity.this,
    android.R.layout.simple_list_item_1, statusess));

ArrayAdapter に渡されたオブジェクトは、toString()メソッドを使用して表示されます。現在toString()は、ほとんどがカスタム オブジェクトに対してオーバーライドされ、オブジェクト自体の意味のある説明を提供する目的に役立ちます。文字列形式で文字通りあらゆる種類の情報を提供するようにオーバーライドできます。Statusオブジェクトの場合、toString()必要以上のものが返されます。したがって、関連する情報を を使用して抽出Status#getText()し、別の ArrayList に保存します。

2 回目の試みにも問題があります。

@Override
protected void onPostExecute(String result) {    
    for (twitter4j.Status status3 : statusess) {
        i.setAdapter(new ArrayAdapter<statusess>(MainActivity.this,
            android.R.layout.simple_list_item_1, status3.getText()));
    }
}

ここでは、ArrayAdapter の汎用パラメーターを変数 ('statuses') に設定しています。汎用パラメーターはクラスである必要があります。次に、String最後の引数として a を渡しますが、ArrayAdapter のコンストラクターは、オブジェクトの配列または ArrayList のいずれかを取ることができます。3 番目に、ArrayAdapter の新しいインスタンスを作成し、for ループの各反復で ListView に設定します。これは論理的に正しくありません。ArrayAdapter の 1 つのインスタンスが必要であり、一度だけ設定する必要があります。

他にできること:

  • テキストとともに画像を表示するなど、新しい機能を提供するカスタム ArrayAdapter を作成します。

  • BaseAdapter の詳細: 高度にカスタマイズ可能な汎用アダプター。

于 2013-11-13T16:35:16.120 に答える
2
package com.example.twitterdemo;

import java.util.List;

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

public final class GetTimeLines {
    *//**
     * Usage: java twitter4j.examples.GetTimelines ID Password
     * @param args String[]
     *//*
    public static void main(String[] args) {

        Twitter unauthenticatedTwitter = new TwitterFactory()
                .getInstance();
        System.out.println("Showing public timeline.");
        try {
            List<Status> statuses = unauthenticatedTwitter
                    .getUserTimeline();
            for (Status status : statuses) {
                System.out.println(status.getUser().getName() + ":"
                        + status.getText());
            }
            if (args.length < 2) {
                System.out
                        .println("You need to specify TwitterID/Password combination to show UserTimelines.");
                System.out
                        .println("Usage: java twitter4j.examples.GetTimelines ID Password");
                System.exit(0);
            }

            // Other methods require authentication
            Twitter twitter = new TwitterFactory().getInstance();
            statuses = twitter.getUserTimeline();
            System.out.println("------------------------------");
            System.out.println("Showing " + args[0]
                    + "'s friends timeline.");
            for (Status status : statuses) {
                System.out.println(status.getUser().getName() + ":"
                        + status.getText());
            }
            statuses = twitter.getUserTimeline();
            System.out.println("------------------------------");
            System.out.println("Showing " + args[0] + "'s timeline.");
            for (Status status : statuses) {
                System.out.println(status.getUser().getName() + ":"
                        + status.getText());
            }
            Status status = twitter.showStatus(81642112l);
            System.out.println("------------------------------");
            System.out.println("Showing " + status.getUser().getName()
                    + "'s status updated at " + status.getCreatedAt());
            System.out.println(status.getText());
            System.exit(0);
        } catch (TwitterException te) {
            System.out.println("Failed to get timeline: "
                    + te.getMessage());
            System.exit(-1);
        }
    }
}
于 2013-11-13T09:15:49.093 に答える