Используя Kotlin, Retrofit и Coroutines, я определил интерфейс для получения данных с удаленного сервера и, что наиболее важно, передаю идентификатор выбранного элемента RecyclerView обратно на сервер.
interface CourseService {
@GET("/mobile/feed/course_data.php")
suspend fun getCourseData(@Query("pathName") pathName: String): Response<List<Course>>
}
Здесь Я получаю идентификатор выбранного элемента из RecyclerView из моего MainFragment и сохраняю его в переменной selectedItem.
override fun onPathItemClick(path: Path) {
viewModel.selectedItem.value = path
selectedItem= viewModel.selectedItem.value!!.path_id
navController.navigate(R.id.action_mainFragment_to_courseFragment)
}
Я передаю значение выбранного элемента в функцию getCourseData ()
class CourseRepository(val app: Application) {
val courseData = MutableLiveData<List<Course>>()
init {
CoroutineScope(Dispatchers.IO).launch {
callWebService()
}
}
@WorkerThread
suspend fun callWebService() {
val retrofit = Retrofit.Builder().baseUrl(WEB_SERVICE_URL).addConverterFactory(MoshiConverterFactory.create()).build()
val service = retrofit.create(CourseService::class.java)
val serviceData = service.getCourseData(selectedItem).body() ?: emptyList()
courseData.postValue(serviceData)
}
}
Но я не получаю никаких результатов, и кажется, что значение, переданное в функцию getCourseData (), является нулевым, но при проверке журнал имеет значение.
, поэтому, если я задаю ему предопределенный значение где-нибудь в моем коде, как показано ниже, все прекрасно работает
selectedItem= "MOB001"
val serviceData = service.getCourseData(selectedItem).body() ?: emptyList()
Однако я не могу дать ему фиксированное значение до времени выполнения, потому что значение получается, когда пользователь выбирает элемент из RecyclerView.
Это мои несколько журналов:
2020-05-01 13:56:30.431 23843-23843/ I/mylog: Main Fragment before item click: selectedItem =
2020-05-01 13:56:37.757 23843-23843/ I/mylog: Main Fragment after item click: selectedItem = WEB001
2020-05-01 13:56:37.763 23843-23843/ I/mylog: Course Fragment onCreateView(): selectedItem = WEB001
2020-05-01 13:56:37.772 23843-23901/ I/mylog: Course Fragment CourseRepository: selectedItem = WEB001
Как мне решить эту проблему?