我正在尝试构建一个具有用户登录系统的Android应用程序,该程序在AsyncTask中完成。我有UserLoginTask
连接到Web服务器并在String中检索服务器响应。该字符串应解析为本地SQLite数据库,某些字段应位于SharedPreferences
中。但是当doInBackground()
方法完成其工作时,JSON的解析就完成了。问题是我应该创建另一个AsyncTask来解析JSON并使用数据库来获得更好的性能吗?如果是,则此AsyncTask(假设为ParseJSONtask)应位于LoginActivity
或MainActivity
内,何时应从LoginActivity
移至MainActivity
。还有什么是本地用户数据存储系统的最佳实践?
答案 0 :(得分:3)
您可以使用单个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 :(得分:-1)
一个好方法是使用改造(http://square.github.io/retrofit/)。
如果你想在doInBackground中使用android,你可以使用json并将其解析为obj,就像在这个tuto中一样(http://www.androidhive.info/2012/01/android-json-parsing-tutorial/)
答案 2 :(得分:-1)
我认为您可以构建逻辑,以便在同一个AsyncTask中进行下载,解析和保存。如果你真的需要,你当然可以启动另一个AsyncTask。除了你的代码变得混乱之外,这种方法没有错。
答案 3 :(得分:-1)