Android - 如何通过ContentProvider修改数据库时使用事务?

时间:2016-03-01 18:05:29

标签: android sqlite transactions android-contentprovider android-database

当用户点击他们的NFC标签时,我的应用

  1. 将新用户插入users表格,取回用户_id,然后
  2. 将此_id值写入用户的NFC标记。
  3. 问题在于,如果该用户过快地移动其代码,则步骤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 个答案:

答案 0 :(得分:0)

您可以撤消操作:您可以在数据库中查询下一个可用ID,将ID写入NFC标签,如果您成功更新了NFC标签,则使用该ID更新数据库。