2017-07-20 120 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

非常感謝你 –