2010-07-22 82 views
3

在我的应用程序中,我有不同的listviews活动。数据来自带有REST方法的服务器,并且只有在启动应用程序时才会执行一次。REST和列表视图刷新

我想设置的模式是用本地已有的JSON预充所有列表视图,并且使用我的REST方法启动一个获取新JSON文件的线程,然后更新列表视图。

现在,当我启动应用程序时,我解析了我的JSON文件,并构建了所有对象列表。我稍后以静态方式从我的列表适配器访问它们。

所以我想知道启动这个REST线程并更新listview的最好方法。我应该使用AsyncTask吗?服务?然后,当我更新我的本地JSON时,我必须重新解析它们,更新对象列表,并在我的适配器NotifyDataChanged中调用?

感谢

回答

1

所以我找到了我的问题的完美解决方案。
我用我的AsyncTask在onPostExecute一个sendBroadcast()(),与广播接收器在我所有的活动需要得到通知:

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(); 
      } 
     } 
    } 
} 

这很简单,和完美的作品。

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); 

我如果你愿意,我会很乐意提供更多的细节。

谢谢