我在做什么
我正在對我的 android 應用程式實施 oauth2 行程。用戶通過瀏覽器授權應用程式后,我的應用程式將啟動一個 Activity 從 Intent 檢索授權代碼,然后使用該代碼獲取 API 的訪問令牌。
我在 viewMomodel 中有一個注入存盤庫的方法,以繼續獲取訪問令牌 API:
@HiltViewModel
class MainActivityViewModel @Inject constructor(
private val repository: AuthRepository
) : ViewModel() {
fun getAccessToken(authCode: String) {
...
}
...
}
在活動中獲取 viewModel:
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
private val viewModel : MainActivityViewModel by viewModels()
...
}
在活動中,可以這樣檢索授權碼:
//retrive code from intent
val authCode = intent.data.getQueryParameter("code")
題
我的問題是,如何將 authCode 從活動傳遞到 viewModel 并getAccessToken從 viewModel 的 init 塊呼叫該函式?
@HiltViewModel
class MainActivityViewModel @Inject constructor(
private val repository: AuthRepository,
private val authCode: String //how to pass this parameter?
) : ViewModel() {
init {
//Want to call getAccessToken here
getAccessToken(authCode)
}
fun getAccessToken(authCode: String) {
...
}
...
}
我已經閱讀了這篇精彩的文章https://medium.com/mobile-app-development-publication/passing-intent-data-to-viewmodel-711d72db20ad并得到了savedStateHandle可以提供鍵值對 Intent 資料的想法。但是在我的情況下,authCode它存盤在intent.data但不是intent.extras包中,是否仍然可以從savedStateHandle獲取資料?
如果沒有,我認為另一個解決方案是創建一個自定義 ViewModelFactory 來傳遞引數,但我是新手,不知道如何實作這一點。如果有人能給我一些指導,我將不勝感激……謝謝。
uj5u.com熱心網友回復:
您需要注釋authCode與@Assisted并創建一個自定義的viewModelFactory。你可以在這里找到更多關于這個
https://proandroiddev.com/whats-new-in-hilt-and-dagger-2-31-c46b7abbc64a
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362389.html
