我在我的android應用程序中有一個SQLite查詢,當它執行時間太長時,似乎會崩潰。它崩潰與NullPointerException並告訴我的行號...Android SQLite查詢崩潰時間過長?
當我把斷點周圍,看到它總是充滿變量,應用程序不會崩潰,並做它應該的。
所以,除了有一個幻影空指針,看來問題是,斷點實際上放慢速度,給查詢時間完成。沒有斷點,它總是崩潰而不失敗。
這裏的其他人似乎也有類似的問題,我已經讀了一些關於SQLite花費大量時間來完成任務的東西,但是這個表只應該有一些條目(我是一個測試應該只有三個條目,4列)
有關如何使它不會崩潰的建議?也許把一個線程等待內部查詢的方法?
public void fetchItemsToRemove() throws SQLException{
Cursor mCursor =
mapDb.query(myMain_TABLE, new String[] {myOtherId, myCustomID, myDATE}, null, null, null, null, null);
if(mCursor.moveToFirst())
{
do
{
/*taking "dates" that were stored as plain text strings, and converting them to
*Date objects in a particular format for comparison*/
String DateCompareOld = mCursor.getString(mCursor.getColumnIndex(myDATE));
String DateCompareCurrent = "";
Date newDate = new Date();
DateCompareCurrent = newDate.toString();
try {
DateCompareOld = (String)DateCompareOld.subSequence(0, 10);
DateCompareCurrent = (String)DateCompareCurrent.subSequence(0, 10);
SimpleDateFormat dateType = new SimpleDateFormat("EEE MMM dd");
Date convertDate = dateType.parse(DateCompareOld);
newDate = dateType.parse(DateCompareCurrent);
if(convertDate.compareTo(newDate) < 0)
{
//remove unlim id
mapDb.delete(myMain_TABLE, myDATE + "=" + mCursor.getString(mCursor.getColumnIndex(myDATE)), null);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(mCursor.moveToNext());
mCursor.close();
}
else
{
mCursor.close();
}
}
現在「行342」在這裏與NullPointerException異常崩潰是DateCompareOld = (String)DateCompareOld.subSequence(0, 10);
那裏得到的字符串的序列。如果它到達並且爲空,這意味着該字符串從未填充在
就好像查詢剛剛被跳過,因爲它花了太長時間。請注意這是在一個while循環中,並且我已經完成了測試以確保mCursor永遠不會超出界限。
發佈包含其崩潰行的代碼。 –
你的SQLite連接有一個超時設置嗎?如果是,它是否始終在執行開始後的某個/某個/某個時間發生,或者持續一段時間? – jefflunt
「我不覺得代碼是相關的......」 - 代碼和logcat輸出總是相關的。我們不介意這裏的讀者。 ;) – Squonk