【发布时间】:2021-06-24 15:06:09
【问题描述】:
我想在 ViewModel 初始化时发出 API 请求。这就是为什么我在 init 方法中发出 API 请求;当我在 Activity 中注入 viewModel 时,期待init 被触发。我做错了什么?
MainViewModel.kt
@HiltViewModel
class MainViewModel @Inject constructor(private val mainRepository: MainRepo) : ViewModel() {
companion object {
var TAG = "MainViewModel**"
}
init {
Log.d(TAG, "NOT TRIGGERED: ")
viewModelScope.launch {
val album1: List<AlbumItem> = mainRepository.getAlbums()
}
}}
MainActivity.kt
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val mainViewModel : MainViewModel by viewModels() // injecting viewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding =
DataBindingUtil.setContentView(this, R.layout.activity_main)
}
}
【问题讨论】:
-
init会在调用主构造函数的时候被调用,这里是不是调用了? -
@Jagar,我可以成功地将对象创建为
MainRepo类。它是在主构造函数中创建的。我认为,主构造函数中的一切都很好。但是有一种情况是,当我从 viewModel 内部的活动中调用一个函数时,首先会触发 init,然后调用该函数。正如我在问题中所说,我希望在 Activity 中注入 viewModel 时触发init
标签: android kotlin dependency-injection dagger dagger-hilt