2013-08-20 24 views
0

我一直在玩twitter4j和Android,迄今爲止都很棒。不過,我在解決如何在列表視圖中正確顯示推文時遇到了問題。這是到目前爲止我的代碼的基礎上,code example given on the Twitter4j website在twitter4j的列表視圖中顯示推文

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個鳴叫左右就好了。但我的問題來fromt他最後一部分,我在那裏綁定列表rawStatuses適配器和列表視圖,因爲它基本上是打印屏幕上的所有信息:

tweets

好了,不是所有的信息是有用的或曾經需要,但它在那裏。我不知道如何僅在listView中顯示Twitter句柄和tweet,例如(即從列表rawStatuses中正確提取信息)。我想有一個列出最有用的信息(類似於: List <User, Tweet, ID, Time>),但在我看來,這很麻煩,也是一個非常糟糕的解決方案。

我的問題是:如何能夠或應該管理鳴叫包含的所有信息(許多推文),以便我可以顯示我想要的內容,並且還有剩下的內容?我找到的最接近的答案是this answer,但給出的鏈接不再有效。

我希望我已經解釋了我自己。提前致謝。

回答

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); 
    } 
    }); 
    } 
+0

我還要指出的是,我用我自己的佈局而不是默認的映射我的ListView,而不是使用默認的layout_list_item_1。 – Martin