【问题标题】:Andoridx Room rx issueAndroidx Room rx 问题
【发布时间】:2018-11-13 12:26:43
【问题描述】:

我开始使用支持io.reactivex 返回类型的最新androidx.room 版本。

dependencies {
    def room_version = "2.1.0-alpha02"
    implementation "androidx.room:room-rxjava2:$room_version"
    kapt "androidx.room:room-compiler:$room_version"
    testImplementation "androidx.room:room-testing:$room_version"
}

简单的dao类

@Dao
interface UserDao : BaseDao<UserTable> {

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    fun insertUser(user: UserTable):Maybe<Long>

    @Update
    fun updateUser(user:UserTable):Completable

    @Query("DELETE FROM $USER_TABLE")
    fun clear()
}

生成有错误的UserDao_Impl.java

错误:从内部类中访问局部变量用户;需要声明为final

突出显示的字段在此方法中

  @Override
  public Maybe<Long> insertUser(UserTable user) {
    return Maybe.fromCallable(new Callable<Long>() {
     @Override
     public Long call() throws Exception {
       __db.beginTransaction();
        try {
          long _result = 
           __insertionAdapterOfUserTable.insertAndReturnId(user);//error line
           __db.setTransactionSuccessful();
         return _result;
        } finally {
         __db.endTransaction();
        }
      }
    });
  }

(UserTable user) 确实应该在 java 中声明为 final 但它是生成的类。 有人遇到过这个吗?

【问题讨论】:

  • __insertionAdapterOfUserTable 是最终的?
  • @sasikumar 是的,所有的局部变量都是final
  • 将 long _result 作为最终结果
  • 尝试使用更新的 Java 版本。在这些变量中,编译器能够使用未更改的变量,就好像这些变量是 final
  • @tynn 谢谢你我会试试的

标签: android kotlin android-room androidx


【解决方案1】:

我遇到了同样的问题。通过添加解决它

compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

在 build.gradle 中

【讨论】:

    【解决方案2】:

    我正在使用 Linux 机器并结合 user3021656 和 tynn 的答案成功构建了

    compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_8
      targetCompatibility JavaVersion.VERSION_1_8
    }
    

    并将 Android Studio 的 Java 版本设置为

    java版本“1.8.0_191”

    Java(TM) SE 运行时环境(内部版本 1.8.0_191-b12)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多