从asynctask服务器获取JSON并存储在数据库中
我正在尝试构建一个具有用户登录系统的Android应用程序,该应用程序在AsyncTask中完成。我有UserLoginTask
,它连接到Web服务器并在String中检索服务器响应。这个字符串应该被解析成本地的SQLite数据库,并且一些字段应该在SharedPreferences
。但是,当doInBackground()
方法完成其工作时,完成JSON的解析。问题是我应该创建另一个AsyncTask来解析JSON并使用数据库来获得更好的性能?如果是的话,这个AsyncTask(可以说是ParseJSONtask)应该在LoginActivity
或MainActivity
之内我应该什么时候从LoginActivity
移动到MainActivity
。而且本地用户数据存储系统的最佳做法是什么?从asynctask服务器获取JSON并存储在数据库中
您可以使用单个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
}
}
一个好方法是使用改造(http://square.github.io/retrofit/)。
如果你想只使用Android上,doInBackground,你可以把JSON和在这个政党成员解析它给OBJ像(http://www.androidhive.info/2012/01/android-json-parsing-tutorial/)
我想你可以建立自己的逻辑,这样你做下载,解析并保存在同一个AsyncTask中。如果你真的需要,你当然可以启动另一个AsyncTask。除了你的代码变得混乱之外,这种方法没有什么问题。
- 您只能使用一个AsyncTask解析数据,然后逐个存储数据。
- 您可以有一个AsyncTask进行解析,当解析完成后,它会调用一个回调函数启动另一个AsyncTask来处理数据库。 (注意:你可以在一个并行执行器上启动它,这会更快,因为存储将与解析并行发生,在你的情况下这不需要很多时间,所以它并不重要)
- 只有一个AsyncTask首先调用Volley来获取数据,然后解析并存储。
一旦你解析了doInBackground中的数据,你就可以自己写数据到数据库了。 – Raghunandan
解析doInBackground中的JSON。将数据放入数据库中的doInBackground中。没有必要在这里传播东西。 – Knossos
@Knossos服务器并不总是发送相同的JSON。有字段状态表示用户登录是否成功。如果是,则会出现数据行 –