簡體   English   中英

Android,MVVM:在 ViewModel 中調用 ContentResolver

[英]Android, MVVM: call ContentResolver in ViewModel

我目前正在將我的代碼結構重構為 MVVM 設計模式。 In the official android.com documentation ( https://developer.android.com/topic/libraries/architecture/viewmodel ) they write the following:

注意: ViewModel 絕不能引用視圖、生命周期或任何可能持有對活動上下文的引用的 class。

問題是,在我當前的代碼中,我使用 ContentResolver 來查詢電話上的聯系人數據庫。

var cursor: Cursor? = mainActivity.contentResolver.query(
        ContactsContract.Data.CONTENT_URI,
        projection,
        selection,
        selectionArgs,
        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME
)

我想在 viewModel 代碼中查詢數據庫,但看起來, ViewModel沒有getContentResolver()方法或類似的方法,並且我不允許將活動傳遞給 viewModel。 如何從 viewModel 中訪問數據庫? 甚至可能嗎?

如果您需要訪問 ViewModel 中的上下文,可以使用AndroidViewModel ,它允許您使用getApplication()訪問應用程序上下文。 您可以使用它來獲取諸如 ContentResolver 之類的東西。

您列出的注意事項是關於不在 ViewModel 中使用或存儲活動、片段、視圖或其他生命周期組件 - 並不真正適用於應用程序上下文(有時需要獲取字符串等內容,或者在您的情況下, ContentResolver,與視圖生命周期無關)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM