从asynctask中的服务器获取JSON并存储在数据库中

时间:2016-03-15 15:44:02

标签: android json multithreading sqlite android-asynctask

我正在尝试构建一个具有用户登录系统的Android应用程序,该程序在AsyncTask中完成。我有UserLoginTask连接到Web服务器并在String中检索服务器响应。该字符串应解析为本地SQLite数据库,某些字段应位于SharedPreferences中。但是当doInBackground()方法完成其工作时,JSON的解析就完成了。问题是我应该创建另一个AsyncTask来解析JSON并使用数据库来获得更好的性能吗?如果是,则此AsyncTask(假设为ParseJSONtask)应位于LoginActivityMainActivity内,何时应从LoginActivity移至MainActivity。还有什么是本地用户数据存储系统的最佳实践?

4 个答案:

答案 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)

  1. 您只能使用一个AsyncTask来逐个解析然后存储数据。
  2. 您可以使用一个AsyncTask进行解析,在解析完成后,它会调用一个回调函数来启动另一个AsyncTask来处理数据库。 (注意:您可以在并行执行程序上启动它。这将更快,因为存储将与解析并行发生。在您的情况下,这不需要花费很多时间,因此它并不重要)
  3. 只有一个AsyncTask首先调用Volley获取数据然后解析并存储。