2012-09-27 71 views
0

我有一個AsyncTask將數據發佈到sql數據庫中,然後從該活動中獲取該數據。Android AsyncTask狀態循環

問題是,因爲數據庫是空的,當應用程序第一次啓動它會崩潰嘗試從中獲取的東西。所以我試圖做一個while()循環,這將使得活動等待AsyncTask完成,然後獲取數據。我得到的是一個白色的屏幕,幾秒鐘後,一個「沒有響應」對話框:

MyAsyncTask task = new MyAsyncTask(this, country, img); 
    task.execute(); 

    SetSql mydb = new SetSql(this); 
    mydb.open(); 

    while(task.getStatus()!=AsyncTask.Status.FINISHED){ 
     //wait 
    } 

    countryCode = mydb.getLatestCode(); 
    Log.e("debug", countryCode); 
    mydb.close(); 

原因IM使用的數據庫無論如何是因爲我無法想出一個辦法,從發送一個簡單的字符串返回我的AsyncTask,有沒有辦法從postExecute做到這一點?

回答

1

我認爲你可以使自己的onTaskDone接口,就像這樣:

public class TaskTest extends AsyncTask<String, Integer, String> { 

    interface TaskDoneListener { 
     abstract void onTaskDone(String result); 
    } 

    private TaskDoneListener t; 

    public TaskTest(TaskDoneListener t){ 
     this.t = t; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     // do your stuf 
     return "some thing"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     t.onTaskDone(result); 
     super.onPostExecute(result); 
    } 
} 

您可以使用通知和等待函數,並使用onTaskDone通知某種主題的正在等待結果。

編輯:

在onTaskDone方法執行此代碼:

countryCode = mydb.getLatestCode(); 
Log.e("debug", countryCode); 
mydb.close(); 

編輯2:

活動示例代碼:

public class TestActivity extends Activity implements TaskDoneListener { 
    /** Called when the activity is first created. */ 

    TaskTest task; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //create your layout and stuff 
    } 


    @Override 
    protected void onStart() { 
     super.onStart(); 

     //Dont start you task in the onCreate this could cause some weird behavior 
     //if the onCreate method is not yet done but your task is. 
     task = new TaskTest((TaskDoneListener) this, ##country_code?##, ##image?##); 
     task.execute(); 
    } 


    public void onTaskDone(String result) { 
     //set the results in your created views 

    } 

} 

羅爾夫

+0

對不起,即時通訊有點新asyncTasks,我不知道如何做到這一點......我只是想要一個簡單的方法來修復我的怪異循環或發送AsyncTask數據以簡單的方式活動... – arielschon12

+0

我會做出更好的示例代碼,給我一點時間 –

+0

編輯製作,你現在明白嗎?我創建的Task類是一個當然的例子,所以添加你自己的方法和構造函數變量。你不能阻止你的onCreate等待數據,這是不好的。 –