Android KOTLIN:基本异步/协同路由
我正在做一个学校项目 我有一个剂量列表,所以我需要一个接一个地获取数据 现在我得到: kotlin.UninitializedPropertyAccessException:lateinit属性尚未初始化 因此,我需要等到第一个项目被提取并设置好后,才能继续下一个项目。 你能帮我吗Android KOTLIN:基本异步/协同路由,android,kotlin,Android,Kotlin,我正在做一个学校项目 我有一个剂量列表,所以我需要一个接一个地获取数据 现在我得到: kotlin.UninitializedPropertyAccessException:lateinit属性尚未初始化 因此,我需要等到第一个项目被提取并设置好后,才能继续下一个项目。 你能帮我吗 class ClientDoseListAdapter(private val doses: List<Dose>) : RecyclerView.Adapter<ClientDoseListAda
class ClientDoseListAdapter(private val doses: List<Dose>) : RecyclerView.Adapter<ClientDoseListAdapter.ViewHolder>() {
private lateinit var medicine : Medicine
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.client_dose_listitem, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = doses[position]
runBlocking {
displayMedicine(item.medicine)
}
holder.med_name.text = medicine.name
holder.dose_amount.text = item.amount.toString()
}
private suspend fun displayMedicine(id: Int) {
fetchMedicine(id)
}
override fun getItemCount(): Int = doses.size
inner class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView),
LayoutContainer
private fun fetchMedicine(id: Int) {
service.getMedicine(id, "Bearer ${ClienOverzichtFragment.auth}")
.enqueue(object : Callback<List<Medicine>> {
override fun onResponse(call: Call<List<Medicine>>, response: Response<List<Medicine>>) {
if (response.code() == 200) {
val temp = response.body()!!
medicine = temp[0]
Log.v("SHIT", medicine.name)
} else {
Log.v("SHIT", response.code().toString())
//TODO
}
}
override fun onFailure(call: Call<List<Medicine>>, t: Throwable) {
Log.v("SHIT", "FAILED : "+t.message)
}
})
}
}
类clientdoselistatadapter(private-val:List):RecyclerView.Adapter(){
私人医疗:医学
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
val view=LayoutInflater.from(parent.context)
.充气(R.layout.client\u dose\u listitem,父项,false)
返回视图保持器(视图)
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
val项目=剂量[位置]
运行阻塞{
显示药物(项目.药物)
}
holder.med_name.text=medicine.name
holder.dose_amount.text=item.amount.toString()
}
私家医生(id:Int){
药物(id)
}
重写getItemCount():Int=doges.size
内部类ViewHolder(覆盖val containerView:View):RecyclerView.ViewHolder(containerView),
布局容器
私人药物(id:Int){
service.getMedicine(id,“Bearer${ClienOverzichtFragment.auth}”)
.enqueue(对象:回调{
覆盖fun onResponse(调用:调用,响应:响应){
if(response.code()==200){
val temp=响应。主体()!!
医学=温度[0]
Log.v(“屎”,医学名称)
}否则{
Log.v(“狗屎”,response.code().toString())
//待办事项
}
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
Log.v(“狗屎”,“失败:”+t.message)
}
})
}
}
将您的服务呼叫移出回收器(最好是进入ViewModel,但可以从活动或使用任何其他模式进行呼叫-最重要的是,不应该是回收器的一部分),并在收到数据时将其传递到回收器中
您的客户是否愿意接受药物:
class ClientDoseListAdapter(private val doses: List<Dose>, private val medicine: Medicine)
class ClientDoseListAdapter(私人val剂量:列表,私人val药物:药物)
在您的活动中,启动和呼叫药物并观察它-当数据到达时,将其传递给适配器。假设您使用视图模型,则活动中的代码将如下所示:
viewModel.getMedicine().observe(
this,
Observer<Medicine> { medicine ->
//assuming doses come from somewhere else
adapter = ClientDoseListAdapter(doses, medicine, this)
clientDoseRecyclerView.adapter = adapter
}
)
viewModel.getMedicine().观察(
这
观察员{医学->
//假设剂量来自其他地方
适配器=clientdoselistatadapter(剂量、药物、此)
clientDoseRecyclerView.adapter=适配器
}
)
将您的服务呼叫移出回收器(最好是进入ViewModel,但可以从活动或使用任何其他模式进行呼叫-最重要的是,不应该是回收器的一部分),并在收到数据时将其传递到回收器中
您的客户是否愿意接受药物:
class ClientDoseListAdapter(private val doses: List<Dose>, private val medicine: Medicine)
class ClientDoseListAdapter(私人val剂量:列表,私人val药物:药物)
在您的活动中,启动和呼叫药物并观察它-当数据到达时,将其传递给适配器。假设您使用视图模型,则活动中的代码将如下所示:
viewModel.getMedicine().observe(
this,
Observer<Medicine> { medicine ->
//assuming doses come from somewhere else
adapter = ClientDoseListAdapter(doses, medicine, this)
clientDoseRecyclerView.adapter = adapter
}
)
viewModel.getMedicine().观察(
这
观察员{医学->
//假设剂量来自其他地方
适配器=clientdoselistatadapter(剂量、药物、此)
clientDoseRecyclerView.adapter=适配器
}
)