【发布时间】:2021-12-31 17:46:40
【问题描述】:
使用 Repository 时,我想使用 ViewModel 从 API 获取数据。
但是,我不明白如何配置ViewModel 以获取数据。通过查看我的代码让我知道我是否正确执行此操作。此外,学习推荐会很好,这就是我无法弄清楚的原因。我的基本编码技能需要提高吗?
这是AppModule
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
@Singleton
fun providesPokemonRepository(
api: MovieApiService
) = MovieRepository(api)
@Singleton
@Provides
fun providesMovieApi(): MovieApiService {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(MovieApiService::class.java)
}
}
This is the repository
class MovieRepository @Inject constructor(private val api: MovieApiService) {
suspend fun getMovieLists(): Resource<List<MoviesItem>> {
val response = try {
api.getMovies()
} catch (e: Exception) {
return Resource.Error("An unknown error occurred")
}
return Resource.Success(response)
}
}
这是我要配置的视图模型
@HiltViewModel
class MovieViewModel @Inject constructor(private val repository: MovieRepository) : ViewModel() {
var response: List<MoviesItem> by mutableStateOf(listOf())
val errorMessage: String by mutableStateOf("")
val isLoading = mutableStateOf(false)
fun getMovies() = viewModelScope.launch {
val result = repository.getMovieLists()
}
}
【问题讨论】:
-
你不需要
providesPokemonRepository函数。您的存储库已经进行了构造函数注入,因此 Hilt 将能够创建其实例。只需将MovieRepository标记为@Singleton。顺便说一句,您的代码中有任何错误吗?你到底在寻求什么帮助? -
我想配置视图模型以便我可以使用它,但我不明白我该怎么做@ArpitShukla
-
您的 ViewModel 对我来说似乎已配置。它有权访问存储库。你还想要什么配置?
标签: kotlin mvvm retrofit android-jetpack-compose dagger-hilt