2013-02-09 70 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:我知道問題有點舊了,以防萬一其他人正在閱讀它。