0

當用戶點擊他們的NFC標籤,我的應用程序:Android - 如何通過ContentProvider修改數據庫時使用事務?

  1. 插入一個新的用戶進入users表,找回用戶_id,然後
  2. 寫這個_id值到用戶的NFC標籤。

問題是,如果該用戶將標籤移動得太快,第2步將失敗,並顯示IOException。然後用戶將不得不再次點擊他們的標籤,但是這將導致重複步驟1 - 即重複條目。 : -/

爲了克服這個問題,我想用交易依據this example code from the API documentation

db.beginTransaction(); 
    try { 
    // Insert data into database, getting back _id 
    // Write _id to NFC tag 
    db.setTransactionSuccessful(); 
    } finally { 
    db.endTransaction(); 
    } 

...但我的數據庫被包裹在一個MyContentProvider,所以我不必db訪問。

有不放棄MyContentProvider的使用插入數據時使用的交易方式?

+1

不要使用autogenerated _id ...使用類似guid的東西 – Selvin

+0

謝謝。如果期望的解決方案是不可能的。我會考慮這一點。 (刪除插入的行也是一個選項,但顯然很不理想)。 –

回答

0

您可以撤銷操作:您可以在數據庫中查詢下一個可用ID,將ID寫入NFC標籤,然後使用該ID更新數據庫(如果您成功更新了NFC標籤)。

+0

感謝您的建議,但(如何)可以通過內容提供商獲取下一個可用ID? –

+0

您可以按ID查詢您的內容提供商,並按降序排序。 contentProvider.query(uri,new String [] {「_id」},null,null,「_id DESC」); 獲取光標中的第一個條目,然後將ID增加1。你可以在你的查詢中使用LIMIT來只提取1個條目。 – Francesc

相關問題