2013-02-09 98 views
0

我已经调试代码看起来像SQLite的查询停止AsynkTask螺纹:的Android SQLite的查询停止的AsyncTask

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中只显示“获得PARAMS”的字符串,然后什么(没有任何错误或任何东西)。 在AsyncTask中执行的代码中,dataSource对象的所有方法都是同步的。 在UI线程查询很好。它可能是什么?

回答

0

你不及格与_id任何您的病情里面

"queue_id = ? AND direction = ? AND _id > " 

应该像

"queue_id = ? AND direction = ? AND _id > 1(or may other integer parameter)" + fromId, queryParams 

希望这将有助于

+0

错误。我确实传递了_id参数:''''AND _id>“+ fromId''''。来自Id **的**是int。除了我已经尝试传递它参数阵列。同样的行为。 – 2013-02-09 12:50:45

0

我认为问题是,你正在尝试在查询字符串中包含_id参数(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 
+0

没有区别。同样的问题。 – 2013-02-09 12:52:16

0

DataSource对象都同步方法

当心死锁!请尝试同步您的方法(插入,删除,更新)和读取方法(查询),因为在读取数据时不存在更改数据的风险 PS:我知道问题有点旧了,以防万一其他人正在阅读它。