2010-07-22 80 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); 

我如果你願意,我會很樂意提供更多的細節。

謝謝