我需要在我的android应用程序中插入大量数据到数据库。我有一个对话框,其中包含一个列表视图,其中包含行名,日期,频率,其频率值可以是“每日”,“每月”,“季度”,“每年”等。在将行添加到列表视图后,我需要单击done按钮将这些数据保存到数据库中。我需要根据其频率值来存储每行。也就是说,如果频率值是“每日”,我需要将1095(即3 * 365 - > 3日的每日记录)记录存储到该名称的数据库中,类似地对于每个频率值(“每月” - > 3 * 12,“Quarterly” - > 3 * 4,...),所以它会导致行向数据库的批量插入,并且导致执行时间很长,因此用户可能感觉不好,他不能做任何其他在应用程序中的操作没有完成this.I使用ORMLite添加数据到数据库。我已经完成了这一点如下。如何将大量的记录添加到数据库中android
for (int i = 0; i < listAdapter.getCount(); i++) {
Account rowAcct = new Account();
rowAcct = listAdapter.getItem(i);
if (rowAcct.getFreq().equals("Daily")) {
for (int y = 0; y < 1095; y++) {
Account nwEvt = new Account();
dueDt = saveController.getNextDay(dueDt);
nwEvt.setDueDate(dueDt);
evtId = saveController.createAcc(nwEvt);
}
} else if (rowAcct.getFreq().equals("Monthly")) {
for (int y = 0; y < 35; y++) {
Account nwEvt = new Account();
Date dueDt = saveController.getNextMonth(dueDt);
nwEvt.setDueDate(dueDt);
saveController.createAcc(nwEvt);
}
} else if (rowAcct.getFreq().equals("Quarterly")) {
for (int y = 0; y < 11; y++) {
Account nwEvt = new Account();
dueDt = saveController.getQuarterMonth(dueDt);
nwEvt.setDueDate(dueDt);
evtId = saveController.createAcc(nwEvt);
}
} else if (rowAcct.getFreq().equals("Half-Yearly")) {
for (int y = 0; y < 5; y++) {
Account nwEvt = new Account();
Date dueDt = saveController.getHalfYear(dueDt);
nwEvt.setDueDate(dueDt);
saveController.createAcc(nwEvt);
}
} else if (rowAcct.getFreq().equals("Yearly")) {
for (int y = 0; y < 2; y++) {
Account nwEvt = new Account();
Date dueDt = saveController.getNextYear(dueDt);
nwEvt.setDueDate(dueDt);
saveController.createAcc(nwEvt);
}
}
}
dialog.dismiss();
我如何减少这种插入时间或背景使这个插入过程,并免费做其他事情的应用程序的用户?请建议我通过让用户免费来执行此操作的最佳方式。
运行插入一个新的线程。也许使用'AsyncTask'。 http://developer.android.com/reference/android/os/AsyncTask.html – Breavyn
我认为asynctask是不安全的,如果你不控制orientation.AsyncTask不是为很长的过程设计的。 – KJEjava48