Как преобразовать ответ строки JSON в LiveData без использования Room? - PullRequest
0 голосов
/ 10 мая 2019

Я застрял при преобразовании ответа JSON в LiveData.Это может быть возможно с помощью комнаты.Но я не использую 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
                     )
                 )
             }
         }
     })
 }

1 Ответ

0 голосов
/ 11 мая 2019

Я преобразовал ответ сервера в 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
                     )
                 )
             }
         }
     })
 }
...