Android中的内容提供商Kotlin

时间:2017-07-20 01:48:02

标签: android kotlin

大家好!

我在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?所以!mDatabaseHelper?.writableDatabase?.isReadOnly代码返回Boolean?,但在Kotlin if控制声明中未接受。

有人和我有同样的问题吗?

更新

我使用以下方法找到了解决方案:

val database: SQLiteDatabase = mDatabaseHelper?.writableDatabase as SQLiteDatabase

它有效,但我不知道为什么?

1 个答案:

答案 0 :(得分:3)

只需使用let

override fun insert(uri: Uri?, values: ContentValues?): Uri? {
    mDatabaseHelper?.let {
        if (it.writableDatabase.isReadOnly) {

        }
    }

    return uri
}

?.let { it -> ... }如果它不是null,则在闭包内给出数据库助手对象。