android - 删除表时出现受限 API lint 错误。房间持久性

标签 android database lint

所以我试图删除我的 Room Persistence 表中的所有项目,这显然导致我这样做:

@Dao 
interface MyDao {
    @Query("DELETE FROM myTableName")
    public void nukeTable();
}

Stack overflow suggestion

但是,在运行 ./gradlew lint 时,我遇到了如下所示的受限 API 故障。

Dao_Impl.java

1.我的代码

@Dao
public interface AlertDao {

    @Insert
    void insert(List<Alert> alert);

    @Query("SELECT * FROM alert")
    List<Alert> queryAll();

    @Query("DELETE FROM alert")
    void deleteTable();
}
  1. 我的 lint 错误

Restricted API ../generated/source/apt/debug/com/app/test/storage/dao/AlertDao_Impl.java:>84: SharedSQLiteStatement.acquire can only be called from within the same >library group (groupId=android.arch.persistence.room) 81 82 @Override 83 public void deleteTable() { 84 final SupportSQLiteStatement _stmt = >__preparedStmtOfDeleteTable.acquire();
85 __db.beginTransaction(); 86 try { 87 _stmt.executeUpdateDelete();

../generated/source/apt/debug/com/app/test/storage/dao/AlertDao_Impl.java:91: SharedSQLiteStatement.release can only be called from within the same library group (groupId=android.arch.persistence.room) 88 __db.setTransactionSuccessful(); 89 } finally { 90 __db.endTransaction(); 91 __preparedStmtOfDeleteTable.release(_stmt);
92 } 93 }

../generated/source/apt/debug/com/app/test/storage/dao/AlertDao_Impl.java:98: RoomSQLiteQuery can only be called from within the same library group (groupId=android.arch.persistence.room) 95 @Override 96 public List queryAll() { 97 final String _sql = "SELECT * FROM alert"; 98 final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 0);
99 final Cursor _cursor = __db.query(_statement); 100 try { 101 final int _cursorIndexOfAutoGeneratedKey = _cursor.getColumnIndexOrThrow("autoGeneratedKey");

../generated/source/apt/debug/com/app/test/storage/dao/AlertDao_Impl.java:134: RoomSQLiteQuery.release can only be called from within the same library group (groupId=android.arch.persistence.room) 131 return _result; 132 } finally { 133 _cursor.close(); 134 _statement.release();
135 } 136 } 137 }

如有任何帮助,我们将不胜感激。

问候

最佳答案

我在这里发现了一些类似的问题 Android Architecture Component Issue Tracker .根据这个问题,他们可能会忽略linting 中生成的代码。 Android 架构组件仍处于alpha阶段,因此他们正在努力修复它。

我在我的应用程序中使用了 deleteTable(),我的 DAO 看起来像

@Query("DELETE FROM tv_show")
void deleteTable();

它对我有用,没有给出任何 lint 错误。

D/TVShowViewModel: deleteTVShowTable: Delete

确保您使用的是 架构组件gradle最新版本,以避免任何已修复的错误。在此处查找最新版本 Android Architecture Components Releases

您现在可以在 Android Studio 项目 gradle 文件中禁用 RestrictedApi 作为解决方法

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

关于android - 删除表时出现受限 API lint 错误。房间持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45648530/

相关文章:

android - 为什么 Android 文档说 Intent Extras 需要包前缀

android - 在 onCreate 中获取内容 View 大小

从 MySQL 查询中找到第一个正确记录后,Java ResultSet 返回所有记录

java - 在我的应用程序中添加自定义字段

Java/SpotBugs,如果在接口(interface)中声明 "named static inner class",那么它是什么?

batch-file - MSDOS .bat 文件的静态分析器,与 NT 派生版本的 Windows 兼容?

java - Android DataBinding、onItemrangeMoved - 条目 block 何时在列表中移动?

android - 上传到 google play 时出现 aapt 错误

mysql - XAMPP卸载后恢复数据库数据

javascript - 如何设置 ESLint 规则来识别函数是否为驼峰命名法?