我正在開發 android 應用程式,我已經在 viemodel 類中實作了成功和失敗案例,但我得到以下不匹配型別不匹配。要求:結果!找到:結果<回應>
在我的 NewsViewModel 下面,我在獲取資料時實作了成功和失敗案例
class NewsViewModel(private val repository: NewsRepository) : ViewModel() {
private var _newsResponse= MutableLiveData<Result<NewsResponse>>()
// Expose to the outside world
val news: LiveData<Result<NewsResponse>> = _newsResponse
@UiThread
fun getNews() {
viewModelScope.launch(Dispatchers.IO) {
try {
val response = repository.getNews()
_newsResponse.postValue(Result.success(response))
} catch (ioe: IOException) {
_newsResponse.postValue(Result.Failure("[IO] error please retry", ioe))
} catch (he: HttpException) {
_newsResponse.postValue(Result.Failure("[HTTP] error please retry", he))
}
}
}
}
在我的 NewsRepository.ktclass 下面
NewsRepository(
private val apiInterface:NewsInterface
){
suspend fun getNews() = apiInterface.getNews()
}
在我的 Result 類下面
sealed class Result<out T> {
data class Success<out R>(val value: R): Result<R>()
data class Failure(
val message: String?,
val throwable: Throwable?
): Result<Nothing>()
}
我想知道我到底在哪里犯了錯誤我必須做什么才能解決這個問題
在我的新聞界面下方
匯入 com.example.newsworldwide.model.NewsResponse 匯入 retrofit2.Response 匯入 retrofit2.http.GET 介面 NewsInterface {
@GET("ApiKey")
suspend fun getNews(): Response<NewsResponse>
}
uj5u.com熱心網友回復:
您NewsInterface正在回傳Response<NewsResponse>,并且您NewsViewModel將其直接傳遞給它,response因此它在發布時變為 Result.Success<Response<NewsResponse>>。這就是為什么這個錯誤。
解決方案:
body()從改造回應類中獲取價值。- 使用(!!)使其不可為空,因為您的
_newsResponse實時資料正在接受NewsResponse不可為空的資料。您可能想在此處處理 null 大小寫。
所以你的最終代碼看起來像這樣。
class NewsViewModel(private val repository: NewsRepository) : ViewModel() {
private var _newsResponse= MutableLiveData<Result<NewsResponse>>()
// Expose to the outside world
val news: LiveData<Result<NewsResponse>> = _newsResponse
@UiThread
fun getNews() {
viewModelScope.launch(Dispatchers.IO) {
try {
val response = repository.getNews().body()!! //change this line
_newsResponse.postValue(Result.Success(response))
} catch (ioe: IOException) {
_newsResponse.postValue(Result.Failure("[IO] error please retry", ioe))
} catch (he: HttpException) {
_newsResponse.postValue(Result.Failure("[HTTP] error please retry", he))
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/418636.html
標籤:
