当前位置: 首页 > 知识库问答 >
问题:

room-schema导出目录未提供给注释处理器,因此我们无法导出模式

呼延俊良
2023-03-14

我正在使用Android数据库组件

我已经配置了所有的东西,但是当我编译的时候,Android Studio给了我这个警告:

模式导出目录未提供给注释处理器,因此我们无法导出模式。您可以提供room.schemaLocation注释处理器参数,或者将exportSchema设置为false。

据我所知,它是DB文件的所在位置

怎么会影响我的APP?这里的最佳实践是什么?是否应该使用默认位置(false值)?

共有2个答案

施慈
2023-03-14

在应用程序模块的build.gradle文件中,将其添加defaultconfig部分(在android部分下)。这将把架构写到项目文件夹的schemas子文件夹中。

javaCompileOptions {
    annotationProcessorOptions {
        arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
    }
}

像这样:

// ...

android {
    
    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

        // ... (applicationId, miSdkVersion, etc)
        
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }
   
    // ... (buildTypes, compileOptions, etc)

}

// ...
盖嘉珍
2023-03-14

根据文件:

您可以设置注释处理器参数(Room.schemaLocation)来告诉Room将模式导出到文件夹中。尽管这不是强制性的,但在代码库中拥有版本历史记录是一个很好的实践,您应该将该文件提交到版本控制系统中(但不要随应用程序一起提供!)。

因此,如果不需要检查模式,并且希望消除警告,只需将exportschema=false添加RoomDatabase中,如下所示。

@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
   //...
}

如果您遵循@MikeJonesGuy下面的回答,您将遵循文档中提到的良好实践:)。基本上,您将在../app/schemas/文件夹中得到一个.json文件。它看起来如下所示:

{
  "formatVersion": 1,
  "database": {
    "version": 1,
    "identityHash": "53db508c5248423325bd5393a1c88c03",
    "entities": [
      {
        "tableName": "sms_table",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` TEXT, `date` INTEGER, `client_id` INTEGER)",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "message",
            "columnName": "message",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "date",
            "columnName": "date",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "clientId",
            "columnName": "client_id",
            "affinity": "INTEGER"
          }
        ],
        "primaryKey": {
          "columnNames": [
            "id"
          ],
          "autoGenerate": true
        },
        "indices": [],
        "foreignKeys": []
      }
    ],
    "setupQueries": [
      "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"53db508c5248423325bd5393a1c88c03\")"
    ]
  }
}

如果我的理解是正确的,您会随着每次数据库版本更新得到这样一个文件,这样您就可以轻松地跟踪您的DB的历史记录。

 类似资料:
  • 问题内容: 我正在使用Android数据库组件室 我已经配置了所有内容,但是在编译时,Android Studio会显示以下警告: 架构导出目录未提供给注释处理器,因此我们无法导出架构。您可以提供注释处理器参数,也可以 将exportSchema设置为false。 据我了解,这是数据库文件所在的位置 它如何影响我的应用程序?最佳做法是什么?我应该使用默认位置(值)吗? 问题答案: 根据文档: 您可

  • 我面临着以下问题,却没有找到真正的解决办法。我试图在没有运气的情况下添加房间库。每次我都会遇到这个错误: 这是我的build.gradle(模块) 实体: 我的课: 我的数据库: 从应用程序创建实例: 嗯,错误还不清楚,我一直在寻找解决办法。 如果我删除MyDatabase类,构建过程将成功结束。我想问题出在这门课上,但我找不到。

  • 本文向大家介绍登录超时给出提示跳到登录页面(ajax、导入、导出),包括了登录超时给出提示跳到登录页面(ajax、导入、导出)的使用技巧和注意事项,需要的朋友参考一下 一、一般页面登录超时验证,可以用过滤器filter,如下: web.xml配置 二、ajax提交 提交页面,我的页面提示弹出框架用的asyncBox,可以改成其他的跳转 后台: 1.处理数据前 三、异步导入excel 用AjaxUp

  • 我被迫使用其他应用程序,而且自Github for Windows以来的命令行不允许我提交更改。我想知道问题出在哪里,但我只是得到一个提示,上面有这样的消息: 然后,它给我选择转到Git Shell或取消。虽然我不是终端方面的专家,但当我选择到Git Shell(或任何其他应用程序)时,我可以做出promise。 我在Windows7上使用Github 2.0.5。

  • 我已经在我的项目中实现了Hilt依赖项,但是当我需要构造函数的@inject注释时,它就不起作用了。基本上,当我试图手动导入它时,我发现javax中的inject文件夹是空的。因此该结构类似于javax.inject。之后,我什么也得不到,因为inject文件夹是空的。我试过重建和清洁他的项目。我也尝试过使缓存无效,但似乎没有任何效果。我怎么才能让这起作用? 依赖项列表 刀柄版本-2.37