2016-03-15 139 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来获取数据,然后解析并存储。
相关问题