2014-02-25 105 views
0

我正在創建一個移動應用程序,它使用AsyncTask從遠程數據庫更新本地數據庫。這工作正常,但視圖(旋轉器和表數據)依賴於本地數據庫中的數據。如果在初始運行asynctask之後這樣做很好,但在第一次加載時屏幕是空白的。等待,而Asynctask完成android

我:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    SharedPreferences sp = getSharedPreferences("***", 0); 
    boolean initalSync = sp.getBoolean("***.android.db.inital", false); 

    if(initalSync==false){ 
    AsyncTaskRunner backgroundTask = new AsyncTaskRunner(this); 
    backgroundTask.execute(); 
    } 

因爲從遠程數據庫遠程數據庫的本地數據庫的更新是一個後臺任務,如果initalsync布爾是假執行。

該片段顯示基於本地數據庫的信息,並且是默認/啓動視圖。

我目前運行

if(initalSync==true){ 
    // DISPLAY TABLE OF DATA 
    } 

我知道我不能「暫停」的線程,我不能執行本地表數據顯示在onPostExecute我會更新在其他時間數據庫保護它。

我基本上希望顯示進度條,等待的AsyncTask完成,然後允許的代碼的其餘部分運行

任何想法?

+1

是的,你不能等待,你需要顯示的東西,而你沒有別的可以顯示。進度條是一個好主意。我不明白的是,你這樣做的問題在哪裏。 – zapl

回答

0

你想提供一個處理程序,你可以傳入你的AsynchTask聽起來。

在AsyncTask中提供諸如setCompletionHandler(myCompletionHandler)之類的函數。

public void setCompletionHandler(MyCompletionHandler handlerF) 
{ 
    asyncHandler_ = handlerF; 
} 

然後在您的本地活動中創建您的處理程序。

private class MyCompletionHandler 
{ 
    operationCompleted() 
    { 
     // updateTableCode ... 
    } 
} 

當你已經完成了的AsyncTask任務,調用

asyncHandler_.operationCompleted() 
0

使用progressdialog,並更新你的意見onPostExecuted方法。

public class MyAsyncTask extends AsyncTask ... 

    onPreExecute 
     // create progress dialog 
     // start dialog 


    doBackground 
     // get your data while progress dialog is shown 

    onPostExecuted 
     // dismiss dialog 
     // update your views. 
+0

我如何更新我的意見/片段? – user2229747