我的DAO类中有一个使用@Transaction注释的方法,这会导致以下错误:
DAO方法只能使用以下方法之一进行注释:插入,删除,查询,更新
这是我的班级:
@Dao interface Dao {
@Insert(onConflict = REPLACE) fun insertList(chacaras: List<String>)
@Query("SELECT * FROM chacara WHERE cityId = :cityId")
fun getListOfCity(cityId: String): LiveData<List<String>>
@Delete fun deleteList(chacaraList: List<String>)
@Transaction
fun updateList(list: List<String>){
deleteList(list)
insertList(list)
}
}
Run Code Online (Sandbox Code Playgroud)
当我删除使用@Transaction注释的方法时,它会正常编译.有没有什么办法解决这一问题?
我有一个名为Chacara的类,它有各种属性,包括thumbList,它是一个List <String>
将它保存到ROOM时,我使用类型转换器:
class DbTypeConverter {
@TypeConverter
fun listToString(list: List<String>): String = Gson().toJson(list)
@TypeConverter
fun stringToList(string: String): List<String> {
return Gson().fromJson<List<String>>(string, object: TypeToken<List<String>>() {}.type)
}
}
Run Code Online (Sandbox Code Playgroud)
当我获取整个对象并访问thumbList属性时,它按预期工作:
@Query("SELECT * FROM chacara WHERE id = :id LIMIT 1")
abstract fun getChacaraWithId(id: String): LiveData<Chacara>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试仅获取thumbList属性时,结果不会转换:
@Query("SELECT thumbUrlList FROM chacara WHERE id = :id")
abstract fun getChacaraThumbList(id: String): LiveData<List<String>>
Run Code Online (Sandbox Code Playgroud)
我还在TypeConverter中添加了一个日志,以确保它没有被调用.
TL; DR:ROOM不调用TypeConverter而不将String转换回List(SELECT'column_name'),但在请求整个对象时工作(SELECT*)
我有一个模块化的应用程序,以支持即时应用程序.
应用模块:
我尝试通过添加以下内容添加Firebase:
com.google.gms:google-services:3.1.1'→到Project Level build.gradlecom.google.firebase:firebase-core:${versions.firebase}"→到基本模块com.google.gms.google-services'→到基本模块的底部当我运行非即时应用程序时,我收到以下错误:
I/FirebaseInitProvider:FirebaseApp初始化失败
E/FA:GoogleService初始化失败,状态:10,来自名称为google_app_id的字符串资源中的Google app id值丢失.
I/FA:应用程序测量正在启动,版本:11720
I/FA:启用调试日志记录运行:adb shell setprop log.tag.FA VERBOSE
I/FA:要启用更快的调试模式事件日志记录运行:adb shell setprop debug.firebase.analytics.app com.punpuf.chacaraselazer.app
E/FA:缺少google_app_id.Firebase Analytics已停用.见https:// goo(...)
E/FA:无法上传.应用测量禁用
I/FA:找不到标记管理器,因此不会使用
当我运行即时应用程序时,我收到以下错误:
V/FA:取消工作.JobID:1799580119
E/FirebaseApp:Firebase API初始化失败.(...)引起:java.lang.NullPointerException:尝试在空对象引用上调用接口方法'void android.app.job.IJobScheduler.cancel(int)'
I/FirebaseInitProvider:FirebaseApp初始化成功
如果我添加以下行:" FirebaseAnalytics.getInstance(this)",它不仅会收到以前的错误,还会崩溃:
E/AndroidRuntime:FATAL EXCEPTION:main进程:com.punpuf.chacaraselazer.app,PID:11273 java.lang.RuntimeException:无法启动活动ComponentInfo {(...)}:java.lang.NullPointerException:尝试调用接口null对象引用上的方法'void android.app.job.IJobScheduler.cancel(int)'
所以我的问题是如何让Firebase Analytics工作,而不是在我的应用的即时和非即时版本上崩溃.
虽然这个问题有点类似于在Android Instant应用程序中FirebaseApp初始化失败,但我的不包含相同类型的错误.
更新:我已经创建了一个新的Firebase项目,并更新了我的google-services.json,但仍然无效.
这是我的gradle文件:
在最新版本的约束布局Beta 5中,使用match_parent会引发异常:
android.view.InflateException: Binary XML file line #12: MATCH_PARENT is not supported in ConstraintLayout
Run Code Online (Sandbox Code Playgroud)
如发行说明中所述:
"(...)它的行为未定义.为了减少错误的风险,如果我们遇到它,我们现在抛出异常." - 来源
他们建议正确的用法是使用0dp(MATCH_CONSTRAINT),但由于我在约束布局中有一个抽屉布局,因此将宽度设置为0dp会抛出"DrawerLayout必须使用MeasureSpec.EXACTLY测量"错误.
所以我的问题是如何抑制错误"ConstraintLayout不支持MATCH_PARENT"?
在 Jetpack compose 1.0.0-beta01 中,我像这样调用 BottomSheetScaffold:
BottomSheetScaffold(
scaffoldState = bottomSheetScaffoldState,
sheetContent = { Text("") },
sheetShape = Shapes.large,
backgroundColor = AppTheme.colors.uiBackground,
modifier = modifier
) { (content) }
Run Code Online (Sandbox Code Playgroud)
...并收到以下错误:
java.lang.IllegalArgumentException:初始值必须有关联的锚点。
有关解决此问题的任何提示?