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数据库是不是只读数据库。 因为mDatabaseHelperLocalSQLiteHelper? 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的话。