这是我参与「第四届青训营 」笔记创作活动的的第5天
[CXX1300] CMake '3.18.1' was not found in SDK, PATH, or by cmake.dir propert
- SDKManager ==》SDK Tools 勾选 cmake
- 查看cmake version
C:\Users\21941\AppData\Local\Android\Sdk\cmake
- 修改cmake version
build.gradle
Failed to find Build Tools revision 30.0.3
选择 Android SDK Build-Tools 30.0.3
【闪退】 :在 Room.databaseBuilder 时闪退
在 build.gradle(app) 加入:(kotlin和 room 版本要一致)
dependencies {
def room_version = "2.4.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// To use Kotlin annotation processing tool (kapt)
kapt "androidx.room:room-compiler:$roomVersion"
// To use Kotlin Symbol Processing (KSP)
ksp "androidx.room:room-compiler:$roomVersion"
}
Could not find method kapt() for arguments [androidx.room:room-compiler:2.4.3] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
在 build.gradle(app) 加入:
plugins {
id 'org.jetbrains.kotlin.kapt'
}
【闪退】在操作Room时闪退
原因:Room不允许在主线程中操作数据库
解决:在Room.databaseBuilder时开启运行主线程
Room.databaseBuilder(
context.applicationContext,
ItemDatabase::class.java,
"database"
).allowMainThreadQueries().build()
object abstract报错
原因:kotlin 中 object 不允许是抽象的
解决:在 abstract 类中使用 companion object 作为静态方法构造单例模式
//singleton
@Database(entities = [Item::class], version = 1, exportSchema = false)
abstract class ItemDatabase : RoomDatabase() {
companion object {
private lateinit var database: ItemDatabase
@JvmStatic
fun getDatabase(@NotNull context: Context): ItemDatabase {
if (!this::database.isInitialized) {
database = Room.databaseBuilder(
context.applicationContext,
ItemDatabase::class.java,
"database"
).build()
}
return database
}
}
abstract fun getItemDao(): ItemDao
}
Caused by: java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.
原因:更新数据库后未更新数据版本
解决:手动调整数据库版本
注意:每次数据库(尤其是列属性)反生变化需要调整数据库版本
OkHttp:response.body?.string() 闪退,报错:E/AndroidRuntime: FATAL EXCEPTION: main
原因:response.body?.string() 存在IO操作,不能再主线程进行。
解决:
fun doMovieGet(callback: OkHttpCallback) {
OkHttpUtils.rankClient.newCall(OkHttpUtils.getMovieRankRequest()).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
Log.e(OkHttpUtils.TAG, "onFailure: $e")
OkHttpUtils.handle.post {
callback.isFail()
}
}
override fun onResponse(call: Call, response: Response) {
Log.d(OkHttpUtils.TAG, "onResponse: ${response.body}")
// 回调前进行数据处理
val json = response.body?.string()
if (json != null) {
OkHttpUtils.handle.post {
callback.isSuccess(json)
}
} else {
OkHttpUtils.handle.post {
callback.isFail()
}
}
}
})
}
LiveData使用ArrayList报错
报错代码:E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
原因:LiveData 默认在子线程下,而 ArrayList 线程不安全
解决:使用线程安全的 List
注意:在 ./#【闪退】在操作Room时闪退 中提到,数据库操作一般在子线程运行,使用 ArryList ,也会报错。
git:本地仓库和远程仓库之间冲突解决
解决方法
1、把远程仓库master分支下载到本地并存为tmp分支
git fetch origin master:tmp 2、查看tmp分支与本地原有分支的不同
git diff tmp 这里主要是看看有没有其他的改动…
3、将tmp分支和本地的master分支合并
git merge tmp 这个时候呢,本地与远程就没有冲突了,而且还保留了我今天的代码,现在Push就OK啦!
4、最后别忘记删除tmp分支
git branch -d tmp
原文链接:blog.csdn.net/weixin_3937…