您好我开发了用于在列表中显示推文的应用程序.. 我从parse.com获得了所有的twitter ID 代码。
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
"Twitter");
ob = query.find();
String[] strings = new String[ob.size()];
// for (ParseObject imageupload : ob) {
for (int i = 0; i < strings.length; i++) {
ParseObject object = ob.get(i);
strings[i] = object.getString("TwitterId");
// images.add(map);
}
if (isNetworkAvailable()) {
new DownloadTwitterTask(getActivity(), list, images, bar)
.execute(strings);
}
然后我将一组twitter ID传递给异步任务
@Override
protected String[] doInBackground(final String... screenNames) {
// String result = null;
String rString[] = new String[screenNames.length];
for (int i = 0; i < rString.length; i++) {
rString[i] = getTwitterStream(screenNames[i]);
//
}
return rString;
}
// onPostExecute convert the JSON results into a Twitter object (which is an
// Array list of tweets
@Override
protected void onPostExecute(String[] result) {
Twitter twitter = new Twitter();
for (int i = 0; i < result.length; i++) {
twitter.addAll(jsonToTwitter(result[i]));
Collections.sort(twitter, new SimpleDate());
}
adapter = new StreamListAdapter(context, twitter);
list.setAdapter(adapter);
bar.setVisibility(View.GONE);
}
问题是异步任务从所有twitter ID加载推文然后显示在列表中..
我想加载一些推文,然后在其他推文加载到后台时显示它
答案 0 :(得分:0)
一种方法可能是你只给出数组的第一个说10个元素。 AsyncTask加载它并在onPostExecute中发布它,然后你用接下来的10个元素再次调用asyncTask等。只是不要从循环中启动asynctasks,因为推文的顺序可能是不可预测的。
另一种方法可能是挖掘AsynTask类的onProgressUpdate和publishProgress。 http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress%28Progress...%29 我没试过这个,但值得一看。
答案 1 :(得分:0)
AsyncTask
可以产生中间结果:实施onProgressUpdate并在doInBackground
内致电publishProgress
答案 2 :(得分:0)
我不熟悉twitter API,但是如果你在for循环中得到每个数据部分,你可以使用publishProgress:
for (int i = 0; i < rString.length; i++) {
rString[i] = getTwitterStream(screenNames[i]);
publishProgress(rString[i]);
}
您在onProgressUpdate中收到已发布的字符串,该字符串在主App线程上调用:
@Override
protected void onProgressUpdate(String... progress) {
adapter.add(progress[0]);
}
这样,新数据一出现就会出现在列表中。