Как отправить параметры для запроса на получение с помощью дооснащения и котлин Coroutines.? - PullRequest
0 голосов
/ 09 октября 2019

Я следовал учебному пособию от https://proandroiddev.com/suspend-what-youre-doing-retrofit-has-now-coroutines-support-c65bd09ba067. Мне трудно понять, как отправить параметры для получения запроса от MainActivity

Webservice.kt

interface Webservice {
@GET("/todos/{id}")
suspend fun getTodo(@Path(value = "id") todoId: Int): Todo
}

TodoRepository. kt

class TodoRepository {
var client: Webservice = RetrofitClient.webservice
suspend fun getTodo(id: Int) = client.getTodo(id)
}

MainViewModel.kt

class MainViewModel : ViewModel() {
val repository: TodoRepository = TodoRepository()

val firstTodo = liveData(Dispatchers.IO) {
    val retrivedTodo = repository.getTodo(1)

    emit(retrivedTodo)
    }
}

MainAcitvity.kt

class MainActivity : AppCompatActivity() {

lateinit var viewModel: MainViewModel

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

    showFirstTodo()
}

private fun showFirstTodo() {
    viewModel.getFirstTodo().observe(this, Observer {
        titleTextView.text = it.title
    })
}
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Вы можете изменить свой код viewModel примерно так

 private val _todo = MutableLiveData<Todo>()
 val todo : LiveData<Todo> get() =_todo

 //Call this method from activity
 fun getTodo(arg : Int)
 {
  val result = //Call Coroutines here
  _todo.postValue(result)
 }
0 голосов
/ 09 октября 2019

Существует разница между Path и Query в запросе GET.
Вы можете легко передать строку запроса следующим образом:
interface Webservice {

@GET("/todos/{id}")
suspend fun getTodo(@Path(value = "id") todoId: Int, @Query("name") name: String?): Todo
}
...