使用 TweetTimelineListAdapter 加载 UserTimeline 时回调以识别问题

Callback to identify issue while loading UserTimeline using TweetTimelineListAdapter

我正在尝试使用 UserTimelineTweetTimelineListAdapter 来获得 TimeLine,因为可以在 fabric 文档中找到 here。如果我使用我的 open n/w 并提供适当的下载速度,我能够正确加载时间轴。我在最初加载时间轴时显示 ProgressDialog

问题:

如果我在公司 n/w 办公室或者如果我的 2G/3G n/w 太 slow/intermittent,我不确定如何确定它何时真正超时以及这样我不确定什么时候解雇 ProgressDialog.

问题:

是否有任何回调,连接到 TweetTimelineListAdapter 或类似的东西,以便我可以在尝试加载时间轴时了解是否有任何错误、超时等。

我的方法最多:

我可以使用 DataSetObserver 查看时间轴是否已加载和关闭。但是如果加载时出现任何错误或超时等问题,我找不到任何提示。

adapter.registerDataSetObserver(mTwitterDatasetObsv);

DataSetObserver mTwitterDatasetObsv = new DataSetObserver() {
    @Override
    public void onChanged() {
        super.onChanged();
        // dismiss progress dialog
    }

    @Override
    public void onInvalidated() {
        super.onInvalidated();
        // dismiss progress dialog
    }

};

如果我需要提供更多信息,请告诉我。

所以我终于自己弄明白了,并回答了我自己的问题,以防有人感兴趣。

我最初依赖于以下代码行,其中有一些抽象时间来加载 Twitter 时间线,同时我的 Activity 是空白的。为了应对延迟,我显示了ProgressDialog。但正如上面提到的问题,我需要知道在哪里关闭对话框。

final UserTimeline userTimeline = new UserTimeline.Builder().screenName(brandScreenName).build();

// create custom TimeLine adapter object
adapter = new TweetTimelineListAdapter(this, userTimeline);

我发现我们实际上可以调用以下 API 可用于 UserTimeline 以使用 successfailure 方法获得 Callback

// trigger userTimeline manually to get latest tweets
userTimeline.previous(null, new Callback<TimelineResult<Tweet>>() {

    @Override
    public void success(Result<TimelineResult<Tweet>> result) {         
    }

    @Override
    public void failure(TwitterException exception) {           
    }
});

但仅以上一项并没有解决我的问题,因为第一次 success(Result<TimelineResult<Tweet>> result) 被调用并得到了正确的结果,它没有通过通知 adapter 来刷新 ListView。为了解决这个问题,我创建了 class CustomTimeLineAdapter extends TweetTimelineListAdapter 并覆盖了 getItemgetCountgetView 等方法,以从 ArrayList 中获取 Tweet在上面提到的 success 回调中填充。