2016-03-15 142 views
1

我正在嘗試構建一個具有用戶登錄系統的Android應用程序,該應用程序在AsyncTask中完成。我有UserLoginTask,它連接到Web服務器並在String中檢索服務器響應。這個字符串應該被解析成本地的SQLite數據庫,並且一些字段應該在SharedPreferences。但是,當doInBackground()方法完成其工作時,完成JSON的解析。問題是我應該創建另一個AsyncTask來解析JSON並使用數據庫來獲得更好的性能?如果是的話,這個AsyncTask(可以說是ParseJSONtask)應該在LoginActivityMainActivity之內我應該什麼時候從LoginActivity移動到MainActivity。而且本地用戶數據存儲系統的最佳做法是什麼?從asynctask服務器獲取JSON並存儲在數據庫中

+0

一旦你解析了doInBackground中的數據,你就可以自己寫數據到數據庫了。 – Raghunandan

+0

解析doInBackground中的JSON。將數據放入數據庫中的doInBackground中。沒有必要在這裏傳播東西。 – Knossos

+1

@Knossos服務器並不總是發送相同的JSON。有字段狀態表示用戶登錄是否成功。如果是,則會出現數據行 –

回答

2

您可以使用單個AsyncTask來解析JSON響應並將其存儲到數據庫中。不需要爲它創建另一個AsyncTask。當得到正確的迴應時,你應該從LoginActivity移動到MainActivity。

@Override 
protected Void doInBackground(Void... params) { 

    // get your response 

    if (response != null) { 

     // parse your response 

     // store data to database 

     return true; // if login success 

    } else { 

     return false; 
    } 

    return false; 
} 

@Override 
protected void onPostExecute(Boolean result) { 
    super.onPostExecute(result); 

    if (result == true) 

     Intent intent = new Intent(LoginActivity .this, MainActivity.class); 
     startActivity(intent); 
     finish(); 

    } else { 

     // if login failed then show meesage or do your stuff here 

    } 

} 
-1

我想你可以建立自己的邏輯,這樣你做下載,解析並保存在同一個AsyncTask中。如果你真的需要,你當然可以啓動另一個AsyncTask。除了你的代碼變得混亂之外,這種方法沒有什麼問題。

-1
  1. 您只能使用一個AsyncTask解析數據,然後逐個存儲數據。
  2. 您可以有一個AsyncTask進行解析,當解析完成後,它會調用一個回調函數啓動另一個AsyncTask來處理數據庫。 (注意:你可以在一個並行執行器上啓動它,這會更快,因爲存儲將與解析並行發生,在你的情況下這不需要很多時間,所以它並不重要)
  3. 只有一個AsyncTask首先調用Volley來獲取數據,然後解析並存儲。
相關問題