如何在不使用 Room 的情况下将行 JSON 响应转换为 LiveData?
How to convert row JSON response into LiveData without using Room?
我在将 JSON 响应转换为 LiveData 时卡住了。这可以使用 Room 来实现。但是我没有在我的应用程序中使用 Room。
private fun fetchFromNetwork(dbSource: LiveData<T>) {
//here 'result' is MediatorLiveData
result.addSource(dbSource) { newData -> result.setValue(Resource.loading(newData)) }
createCall().enqueue(object : Callback<V> {
override fun onResponse(call: Call<V>, response: Response<V>) {
result.removeSource(dbSource)
// response.body() is JSON response from server and need tobe convert into LiveData type
result.addSource(convertedLiveData) { newData ->
if (null != newData)
result.value = Resource.success(newData)
}
}
override fun onFailure(call: Call<V>, t: Throwable) {
result.removeSource(dbSource)
result.addSource(dbSource) { newData ->
result.setValue(
Resource.error(
getCustomErrorMessage(t),
newData
)
)
}
}
})
}
我已将服务器的响应转换为 MutableLiveData,如下代码所示:
private fun fetchFromNetwork(dbSource: LiveData<T>) {
result.addSource(dbSource) { newData -> result.setValue(Resource.loading(newData)) }
createCall().enqueue(object : Callback<V> {
override fun onResponse(call: Call<V>, response: Response<V>) {
result.removeSource(dbSource)
// here converting server response in to MutableLiveData
val converted: MutableLiveData<T> = MutableLiveData()
converted.value = response.body() as T
result.addSource(converted) { newData ->
if (null != newData)
result.value = Resource.success(newData)
}
}
override fun onFailure(call: Call<V>, t: Throwable) {
result.removeSource(dbSource)
result.addSource(dbSource) { newData ->
result.setValue(
Resource.error(
getCustomErrorMessage(t),
newData
)
)
}
}
})
}
我在将 JSON 响应转换为 LiveData 时卡住了。这可以使用 Room 来实现。但是我没有在我的应用程序中使用 Room。
private fun fetchFromNetwork(dbSource: LiveData<T>) {
//here 'result' is MediatorLiveData
result.addSource(dbSource) { newData -> result.setValue(Resource.loading(newData)) }
createCall().enqueue(object : Callback<V> {
override fun onResponse(call: Call<V>, response: Response<V>) {
result.removeSource(dbSource)
// response.body() is JSON response from server and need tobe convert into LiveData type
result.addSource(convertedLiveData) { newData ->
if (null != newData)
result.value = Resource.success(newData)
}
}
override fun onFailure(call: Call<V>, t: Throwable) {
result.removeSource(dbSource)
result.addSource(dbSource) { newData ->
result.setValue(
Resource.error(
getCustomErrorMessage(t),
newData
)
)
}
}
})
}
我已将服务器的响应转换为 MutableLiveData,如下代码所示:
private fun fetchFromNetwork(dbSource: LiveData<T>) {
result.addSource(dbSource) { newData -> result.setValue(Resource.loading(newData)) }
createCall().enqueue(object : Callback<V> {
override fun onResponse(call: Call<V>, response: Response<V>) {
result.removeSource(dbSource)
// here converting server response in to MutableLiveData
val converted: MutableLiveData<T> = MutableLiveData()
converted.value = response.body() as T
result.addSource(converted) { newData ->
if (null != newData)
result.value = Resource.success(newData)
}
}
override fun onFailure(call: Call<V>, t: Throwable) {
result.removeSource(dbSource)
result.addSource(dbSource) { newData ->
result.setValue(
Resource.error(
getCustomErrorMessage(t),
newData
)
)
}
}
})
}