2013-12-20 66 views
0

我已閱讀本網站上的幾篇文章,以及關於處理程序,線程,HandlerThreads,服務,SyncAdapters,ContentProvider等等的幾本書。似乎有很多不同的選項,我不知道哪個適合我的項目。嘗試決定使用Android連接到Web服務的方法

我有一個簡單的項目,當應用程序第一次啓動時,它將連接到一個簡單的REST Web服務。它將下載一些JSON數據並將其顯示在列表中。然後用戶可以編輯這些數據,並在點擊「保存」後,應用程序將發送POST到帶有更新數據的Web服務。用戶也可以手動發起「同步」,以檢查是否有新的數據。最後,應用程序應定期檢查Web服務以查看是否有更多數據。

我從一個內容提供者開始,但它似乎真的是過度殺傷(和複雜),我相信它最終會起作用。然後我嘗試了一個線程,但Android建議使用AsyncTask或Handlers。我一直在玩弄他們(把他們放在一個服務中),而且他們都會做我想做的事情(使用計時器每隔X分鐘發起一次同步),但我不知道這是否是處理這種情況的最佳方式。我很擔心,因爲這個項目可能會增加更多,我不想選擇一個將來限制我的選項,但我也不想投入大量時間來處理過度的事情。

任何人都可以幫忙嗎?

+0

使用[的AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html) –

回答

1

讓我們從這個整體保持簡單的範例開始吧。

的AsyncTask將是這樣的:

public class MyAsyncTask extends AsyncTask<Void, Void, Data> { 

    public interface OnDone { 
     public void onDone(Data data); 
    } 

    private final OnDone mDone; 

    public MyAsyncTask(OnDone onDone) { 
     mDone = onDone; 
    } 

    public Data doInBackground(Void v) { 
     // Download and parse your JSON in the background 
    } 

    public void onPostExecute(Data data) { 
     mOnDone.onDone(data); 
    } 

} 

public class OnDoneImpl .... implements OnDone, Runnable { 

    ... 
    // Just need a context in scope some how, an activity, the application whatever. 
    Context mContext; 

    public void onDone(Data data) { 
     updateList(data); 
     scheduleAgainInXMinutes(TIME_TILL_REFRESH); 
    } 

    public void scheduleAgainInXMinutes(long millis) { 
     // probably want to use an Alarm service but can always use a handler; 
     new Handler().postDelayed(this, millis); 
    } 

    public void run() { 
      new MyAsyncTask(this).execute(); 
    } 
} 
+0

+1。 AsyncTask爲你做了所有繁重的工作。這是一個很好的例子 – jb15613

相關問題