Java Android SQLite查询停止异步任务
我调试了代码,似乎sqlite查询停止了AsynkTask线程:Java Android SQLite查询停止异步任务,java,android,android-asynctask,android-sqlite,Java,Android,Android Asynctask,Android Sqlite,我调试了代码,似乎sqlite查询停止了AsynkTask线程: Log.d(LOG_TAG, "Getting params"); Cursor c = null; try { String[] queryParams = new String[]{String.valueOf(commandQueueId), String.valueOf(DIRECTION_OUT)}; // ↓↓↓ STOPPING HERE ↓↓↓ c = dataSource.query(TABL
Log.d(LOG_TAG, "Getting params");
Cursor c = null;
try {
String[] queryParams = new String[]{String.valueOf(commandQueueId), String.valueOf(DIRECTION_OUT)};
// ↓↓↓ STOPPING HERE ↓↓↓
c = dataSource.query(TABLE_USER_COMMAND, "queue_id = ? AND direction = ? AND _id > " + fromId, queryParams);
Log.d(LOG_TAG, "After query");
if (c.moveToFirst()) {
UserCommand command;
do {
// Something with cursor
} while (c.moveToNext());
}
} catch (Exception e) {
Log.e(LOG_TAG, "Error while querying", e);
} finally {
Log.d(LOG_TAG, "Finnaly executed");
if (null != c)
c.close();
}
LogCat只显示“Getting params”字符串,然后不显示任何内容(没有错误或任何内容)。
在AsyncTask、dataSource对象中执行的代码使所有方法同步在UI线程查询中效果很好。可以是什么?在您的条件中没有传递任何带有
\u id
的内容
"queue_id = ? AND direction = ? AND _id > "
应该是
"queue_id = ? AND direction = ? AND _id > 1(or may other integer parameter)" + fromId, queryParams
希望它能有所帮助我认为问题在于您试图在查询字符串中包含_id-parameter(fromId)。因此,查询函数可能无法生成查询字符串
"queue_id = ? AND direction = ? AND _id > " + fromId
相反,您应该将fromId添加到selectionArgs(queryParams)中。创建一个字符串数组,其中包含queryParams和fromId。那么它应该会起作用
String[] queryParams = new String[]{String.valueOf(commandQueueId), String.valueOf(DIRECTION_OUT), String.valueOf(fromId)};
c = dataSource.query(TABLE_USER_COMMAND, "queue_id = ? AND direction = ? AND _id > ? ", queryParams ); //queryParams which include your fromId
数据源对象已同步所有方法
小心死锁!尝试只同步您的写入方法(插入、删除、更新)和非读取方法(查询),因为在读取数据时没有更改数据的风险
附言:我知道这个问题有点老了,以防万一别人读到了。不正确。我确实传递了_id参数:
“和_id>”+fromId
。fromId是int。此外,我尝试在params数组中传递它。同样的行为,没有区别。同样的问题。