在我的应用中,我与listviews有不同的活动。数据来自具有REST方法的服务器,当我启动应用程序时,它只执行一次。
我想设置的模式是使用本地已有的JSON预先填充所有列表视图,并且并行地启动一个使用我的REST方法获取新JSON文件的线程,然后更新列表视图。
现在,当我启动应用程序时,我会解析我的JSON文件,并构建所有对象列表。我稍后以静态方式从我的列表适配器访问它们。
所以我想知道启动这个REST线程的最佳方法,并更新listview。我应该使用AsyncTask吗?服务?然后,当我更新我的本地JSON时,我必须重新解析它们,更新对象列表,并调用我的适配器NotifyDataChanged?
由于
答案 0 :(得分:1)
所以我找到了解决问题的完美方案 我在我的AsyncTask的onPostExecute()中使用了sendBroadcast(),并且在我需要通知的所有活动中都使用了broadcastReceiver:
public class ConvenientActivity extends Activity {
...
...
public class RefreshReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(MyMainClass.REFRESH_INTENT)) {
mAdapter.refreshList();
}
}
}
}
这很简单,效果很好。
答案 1 :(得分:0)
所以似乎问题需要细节,所以我要解释问题是什么。
当我启动我的应用程序时,我放了一个启动画面,并且我在最后一次保存的本地解析我的JSON文件。然后我启动了应用程序,其中包含一个带有不同列表视图的选项卡活动,这些列表视图使用我从JSON解析中获得的数据。
在我启动应用程序的同时,我启动了一个查询Web服务的异步任务,并更新了我的本地JSON文件。然后我再次解析文件,我想通知已经启动的所有列表视图,他们必须刷新他们的数据。我真的不知道该怎么做。
以下是我的异步任务的代码
class UpdateTask extends AsyncTask{
@Override
protected Object doInBackground(Object... params) {
// Gets all the JSON Files and save them in local
mJsonClient.loadDistantJSON();
// Updates the cache maps and lists
fillsMaps();
fillsLists();
return null;
}
protected void onPostExecute(Object downloadReturn) {
// Notify the listviews
;
}
}
在包含listview的其他活动中,我以静态方式访问本地缓存列表:
myAdapter = new MyBaseAdapter(this,
SplashScreen.list,listview);
如果你愿意,我很乐意提供更多细节。
由于