Представим, что у вас есть следующий интерфейс:
interface Webservice {
@GET("/getrequest")
suspend fun myRequest(@Query("queryParam1") String param1): Object
}
Внутри модели представления, которая у вас есть, вы можете определить метод, который будет выполнять вызов модификации внутри сопрограммы:
import androidx.lifecycle.Transformations
import kotlinx.coroutines.Dispatchers
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.LiveData
class YourViewModel {
private val mutableLiveData = MutableLiveData<Object>()
val liveData = Transformations.map(mutableLiveData) { object ->
// return object or use it to calculate
// new result that will be returned by this liveData object
// e.g. if object is a List<Int> you can sort it before returning
object
}
companion object {
// Just for the sake of explaining we init
// and store Webservice in ViewModel
// But do not do this in your applications!!
val webservice = Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.addConverterFactory(yourConverter)
.build()
.create(Webservice::class.java)
}
...
fun executeNetworkRequest(String text) {
viewModelScope.launch(Dispatchers.IO) {
val result = webservice.myRequest(text)
withContext(Dispatchers.Main) {
mutableLiveData.value = result
}
}
}
}