Kotlin的Android内容提供商
大家!
我在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?
so !mDatabaseHelper?.writableDatabase?.isReadOnly
代码返回Boolean?
if
控制语句在Kotlin中不被接受。
有没有人对我有同样的问题?
更新:
我发现一个解决方案,使用:
val database: SQLiteDatabase = mDatabaseHelper?.writableDatabase as SQLiteDatabase
它的工作,但我不知道为什么?
只要使用let
:
override fun insert(uri: Uri?, values: ContentValues?): Uri? { mDatabaseHelper?.let { if (it.writableDatabase.isReadOnly) { } } return uri }
?.let { it -> ... }
给你一个封闭的数据库辅助对象,如果它不是null的话。