大家好!
我在Android中为练习Kotlin创建了一个侧面应用程序。我创建了一个这样的提供者:
class TestProvider : ContentProvider() {
companion object {
val sUriMatcher = UriMatcher(UriMatcher.NO_MATCH)
val MATCH_WITH_TEST = 0
init {
sUriMatcher.addURI("$APPLICATION_ID.provider", TestEntity.TABLE_NAME, MATCH_WITH_TEST)
}
}
var mDatabaseHelper: LocalSQLiteHelper? = null
override fun onCreate(): Boolean {
mDatabaseHelper = LocalSQLiteHelper(context)
return true
}
override fun insert(uri: Uri?, values: ContentValues?): Uri? {
if (mDatabaseHelper != null && !mDatabaseHelper?.writableDatabase?.isReadOnly) {
}
return uri
}
}
你知道了!内容提供者必须包含数据库助手。此数据库帮助程序仅在父类的onCreate()
方法中创建。
所以现在我想检查writableDatabase
是否为只读数据库。由于mDatabaseHelper
为LocalSQLiteHelper?
所以!mDatabaseHelper?.writableDatabase?.isReadOnly
代码返回Boolean?
,但在Kotlin if
控制声明中未接受。
有人和我有同样的问题吗?
更新
我使用以下方法找到了解决方案:
val database: SQLiteDatabase = mDatabaseHelper?.writableDatabase as SQLiteDatabase
它有效,但我不知道为什么?
答案 0 :(得分:3)
只需使用let
:
override fun insert(uri: Uri?, values: ContentValues?): Uri? {
mDatabaseHelper?.let {
if (it.writableDatabase.isReadOnly) {
}
}
return uri
}
?.let { it -> ... }
如果它不是null,则在闭包内给出数据库助手对象。