gpt4 book ai didi

java - 快速查询时 SQLite 上出现 CursorIndexOutOfBoundsException 错误

转载 作者:行者123 更新时间:2023-12-01 15:47:35 25 4
gpt4 key购买 nike

我正在使用字段 ID 和 8 个字段字符串(有些可为空)从 SQLite 进行查询。我有一个 getSearchedItemsFromSQLite 方法,每当 EditText 对象(自动搜索)上发生更改状态时就会触发该方法,并且这些错误消息会随机出现,但应用程序根本不会崩溃。

    07-27 18:24:52.619: ERROR/AndroidRuntime(1173): ERROR: thread attach failed
07-27 18:24:55.188: ERROR/AndroidRuntime(1184): ERROR: thread attach failed
07-27 18:25:18.649: ERROR/GuitarTabs(1191): getSearchedItemsFromSQLite: Handler for DB + cursor: Index 6 requested, with a size of 6


07-27 18:25:18.659: WARN/System.err(1191): android.database.CursorIndexOutOfBoundsException: Index 6 requested, with a size of 6
07-27 18:25:18.889: WARN/System.err(1191): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
07-27 18:25:18.889: WARN/System.err(1191): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
07-27 18:25:18.889: WARN/System.err(1191): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
07-27 18:25:18.889: WARN/System.err(1191): at com.package.project.activity.ItemBrowserActivity.getSearchedItemsFromSQLite(ItemBrowserActivity.java:351)
07-27 18:25:18.889: WARN/System.err(1191): at com.package.project.activity.ItemBrowserActivity$AppInitialization.doInBackground(ItemBrowserActivity.java:199)
07-27 18:25:18.889: WARN/System.err(1191): at com.package.project.activity.ItemBrowserActivity$AppInitialization.doInBackground(ItemBrowserActivity.java:1)
07-27 18:25:18.889: WARN/System.err(1191): at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-27 18:25:18.899: WARN/System.err(1191): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-27 18:25:18.909: WARN/System.err(1191): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-27 18:25:18.909: WARN/System.err(1191): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
07-27 18:25:18.909: WARN/System.err(1191): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
07-27 18:25:18.909: WARN/System.err(1191): at java.lang.Thread.run(Thread.java:1096)

我该如何解决这个问题?

这是该方法的代码 fragment :

        dbHelper.open();
cursor = dbHelper.fetchAllTabs(fetchMethod);
startManagingCursor(cursor);
if(cursor != null && cursor.getCount() > 0) {
if(cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
if(cursor.getColumnCount() > 0) {
Log.i(logAppName, "/ - Column count is: " + cursor.getColumnCount());
if(!cursor.isNull(0) && !cursor.isNull(1)) {
if(!cursor.isNull(0)) {
ListedItem tab = new ListedItem();
tab.setSongID(cursor.getInt(0));
if(!cursor.isNull(1)) tab.setTitle(cursor.getString(1));
if(!cursor.isNull(2)) tab.setArtist(cursor.getString(2));
if(!cursor.isNull(3)) tab.setDifficulty(cursor.getString(3));
if(!cursor.isNull(4)) tab.setGenre(cursor.getString(4));
if(!cursor.isNull(5)) tab.setFilename(cursor.getString(5));
if(!cursor.isNull(6)) tab.setFileformat(cursor.getString(6));
if(!cursor.isNull(7)) tab.setSource(cursor.getString(7));
if(!cursor.isNull(8)) tab.setDeleted(cursor.getString(8));
if(Integer.parseInt(tab.getDeleted()) == 0)
ret.add(tab);
else
Log.i(logAppName, "Not adding tab: " + tab.getSongTitle() + " (" + tab.getSongFilename() + ") " + "since it's already deleted.");
cursor.moveToNext();
} else {
Log.i(logAppName, "x - ID is null.");
}
} else {
Log.i(logAppName, "x - Either id or title is null.");
}
} else {
Log.i(logAppName, "x - Column count is: " + cursor.getColumnCount());
}
}
}
if(cursor != null)
cursor.close();

最佳答案

我添加了这些条件:

if ( cursor != null && cursor.getCount() > 0 ) { 
totalRows = cursor.getCount();
if(cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
if(cursor.getColumnCount() > 0) {
...

之后,我添加了一个 sleep 线程,以允许前一个进程先完成,然后再进行另一个进程:

private boolean processing = false;
...

int ctr = 0;
// added fix to avoid error on cursor
while(processing) {
try {
Log.i(logAppName, "Still processing. Count: " + ctr + ". Is processing? " + processing);
ctr++;
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(ctr > 5) {
break;
}
}

关于java - 快速查询时 SQLite 上出现 CursorIndexOutOfBoundsException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6842889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com