2017-07-20 83 views
1

everyone!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 

它工作,但我不知道为什么?

回答

3

只需使用let

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

     } 
    } 

    return uri 
} 

?.let { it -> ... }为您提供了数据库辅助对象封闭的内部,如果它不为空。

+0

谢谢你的帮助。让我先搜索关于'let'的文档。 –

+1

@TrầnĐứcTâm你还应该检查'运行'和'应用'。 :) –

+0

非常感谢你 –