我需要在我的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