我需要在SplashScreenActivity的表中加载来自服务的数据。我已经关注了this教程,一切正常。我还添加了一个自定义的AsyncTask来在后台运行插入循环。
问题是,如果在插入过程中发生配置更改(例如屏幕旋转),一切都会爆炸,并且我会在数据库中保存损坏的数据。
我已经阅读了有关CursorLoader的内容,但这只是用于查询数据库的内容。我也看过ContentProviders,但他们没有解决问题。
有关如何处理此问题的任何想法?
更新:
public class SplashScreenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
...
// Create a Volley Request and fetch data
}
当我得到Response对象时,我启动了AsyncTask:
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response.optString("lastrunstatus").equals(
"success")) {
JSONObject results = response
.optJSONObject("results");
JSONArray objects = results
.optJSONArray("objects");
new HandleResponseAsyncTask().execute(objects);
}
}
在AsyntTask中,我插入所有对象:
private class HandleResponseAsyncTask extends
AsyncTask<JSONArray, String, Void> {
@Override
protected void onPreExecute() {
mDataSource.open();
}
@Override
protected Void doInBackground(JSONArray... params) {
publishProgress("Deleting data...");
mProductosDataSource.deleteAll();
publishProgress("Saving data...");
JSONArray objects = params[0];
for (int i = 0; i < objects.length(); i++) {
JSONObject object = objects.optJSONObject(i);
// Get each column value from JSON
...
mDataSource.insert(id, name, description);
}
return null;
}
@Override
protected void onProgressUpdate(String... messages) {
mTextViewLoading.setText(messages[0]);
}
@Override
protected void onPostExecute(Void result) {
mDataSource.close();
// Go to main
startMainActivity();
}
}
注意:mDataSource包含一个辅助类的实例,该类调用自定义SQLiteOpenHelper类中的方法。