【发布时间】: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