Andoridx Room rx问题

时间:2018-11-13 12:26:43

标签: android kotlin android-room androidx

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

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

  错误:从内部类内部访问本地变量用户;需要声明为最终

突出显示的字段就是这种方法

  @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,但它是生成的类。 有没有人遇到过这个?

2 个答案:

答案 0 :(得分:1)

我有同样的问题。通过添加

解决
compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

在build.gradle

答案 1 :(得分:0)

我正在使用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)