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

相关问题