0

我有一个从 Twitter 加载推文的 AsyncTask。我也有一个 PullToRefresh ListView...每当我拉刷新它时,listview 会立即清除,并且一旦加载数据,它就会被填充到 listview 中。

我的应用程序中有其他 ListViews 都具有相同的东西(PullToRefresh 和异步数据加载......)。在其他 ListViews 上不会发生这种情况。仅在 Twitter ListView 上。我究竟做错了什么?

这是我的代码:

    public class TwitterDownloader extends AsyncTask<Void, Void, String> {

    final Handler mHandler = new Handler();

    public TwitterDownloader() {
    }

    @Override
    public void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Void... params) {
        twitter4j.Twitter twitter = new TwitterFactory().getInstance();

        listTweets.clear();

            List<twitter4j.Status> statuses = null;

            try {
                statuses = twitter.getUserTimeline(
                        MainActivity.TWITTER_USERNAME, new Paging(1, 50));
            } catch (TwitterException e) {
                e.printStackTrace();
                Log.e(MainActivity.LOG_TAG, "TwitterException");
            }

            try {
                for (twitter4j.Status status : statuses) {
                    listTweets.add(status.getText());
                }
            } catch (NullPointerException npe) {
            }
        return null;
    }

    @Override
    public void onPostExecute(String unused) {
        MyCustomAdapter myAdapter = new MyCustomAdapter(myContext,
                R.layout.row_twitter, listTweets);
        setListAdapter(myAdapter);
        getListView().setTextFilterEnabled(true);

        String lastUpdate = (new SimpleDateFormat(
                "HH:mm")).format(new Date());

        pullToRefreshView.onRefreshComplete();
        pullToRefreshView.setLastUpdatedLabel(getString(R.string.last_updated) + ": "
                + lastUpdate);
    }
4

2 回答 2

1

我不确定这一点,但在doInBackgroundAsyncTask 的方法中,你正在做listTweets.clear();. 获得结果后,您正在向其中添加数据。可能是这引起了问题。

于 2012-08-06T10:46:26.370 回答
0

我终于通过在我再次填写我的列表之前添加我所有的 clear() 语句来修复它(这是在一个 try catch 中)。

所以我的 doInBackground 方法中的新代码是:

try {
            listTweets.clear();
            listUsernames.clear();
            listDates.clear();
            listImageURLs.clear();
            listURLsOfTweets.clear();
            for (twitter4j.Status status : statuses) {
                listTweets.add(status.getText());
                listUsernames.add(status.getUser().getName());
                listDates.add(android.text.format.DateFormat
                        .getDateFormat(getApplicationContext()).format(
                                status.getCreatedAt())
                        + " "
                        + android.text.format.DateFormat.getTimeFormat(
                                getApplicationContext()).format(
                                status.getCreatedAt()));
                listImageURLs.add(status.getUser().getProfileImageURL()
                        .toString());

                StringBuffer address = new StringBuffer();
                address.append("http://twitter.com/#!/");
                address.append(status.getUser().getScreenName());
                address.append("/status/");
                address.append(status.getId());

                listURLsOfTweets.add(address.toString());
}
于 2012-12-06T11:24:13.547 回答