当前位置: 首页 > 知识库问答 >
问题:

Gson转换的数据未在RecolyerView中使用Retrofit2设置

车胤运
2023-03-14

Gson可转换数据未使用Retrofit2和rxjava2在RecolyerView中设置,则其给定错误:

mainactivity.kt

internal lateinit var api : APIInterface

lateinit var compositeDisposable: CompositeDisposable

internal lateinit var companyDialog : Dialog

internal lateinit var companyAdapter: CompanyAdapter

internal lateinit var data : List<Company>


fun showCompanyPopupView(){
    companyDialog.setContentView(R.layout.compny_popup_screen)

    val rvCompany : RecyclerView = companyDialog.findViewById(R.id.rvCompany)

    rvCompany.setHasFixedSize(true)
    rvCompany.layoutManager = LinearLayoutManager(this)

    fetchData()
    companyDialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    companyDialog.show()
}

private fun fetchData(){

    val retrofit = APIClient.apIClient
    if (retrofit != null) {
        api = retrofit.create(APIInterface::class.java)
    }
    compositeDisposable.add(api.getCompanyData()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe ({ companyList-> displayData(data)
            },{
                Toast.makeText(applicationContext, it.message, Toast.LENGTH_SHORT).show()
            })

    )

}


private fun displayData(companyList: List<Company>) {


    val adapter = CompanyAdapter(this,companyList)
    rvCompany.adapter = adapter

}

CompanyAdapter.kt

class CompanyAdapter(内部var Context:Context,内部var CompanyList:List):RecyclerView.Adapter(){override fun onCreateViewWholder(P0:ViewGroup,P1:Int):CompanyViewWholder{TODO(“未实现”)//使用文件设置文件模板更改创建函数的主体。

    val itemView = LayoutInflater.from(p0.context).inflate(R.layout.list_view_item,p0,false)

    return CompanyViewHolder(itemView)
}

override fun getItemCount(): Int {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    return companyList?.size!!
}

override fun onBindViewHolder(p0: CompanyViewHolder, p1: Int) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

   // p0.rbButton.text = this!!.companyList?.get(p1)?.Cmp_Name
    p0.bindModel(companyList[p1])
}

inner class CompanyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){

    val radioButton : RadioButton = itemView.findViewById(R.id.rbCompanyName)

    fun bindModel(company: Company){

        radioButton.text = company.Cmp_Name
    }
}

}

共有1个答案

邓高韵
2023-03-14

错误描述得很好,您在初始化变量compositeDisposable之前使用了它。

在调用变量之前,只需以以下方式初始化它:

internal lateinit var api : APIInterface

var compositeDisposable = CompositeDisposable()

internal lateinit var companyDialog : Dialog
internal lateinit var companyAdapter: CompanyAdapter
internal lateinit var data : List<Company>

fun showCompanyPopupView(){
 companyDialog.setContentView(R.layout.compny_popup_screen)

 val rvCompany : RecyclerView = companyDialog.findViewById(R.id.rvCompany)

 rvCompany.setHasFixedSize(true)
 rvCompany.layoutManager = LinearLayoutManager(this)

 fetchData()
 companyDialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
 companyDialog.show()
}

private fun fetchData(){
   val retrofit = APIClient.apIClient

   if (retrofit != null) {
    api = retrofit.create(APIInterface::class.java)
  }

  compositeDisposable.add(api.getCompanyData()
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe ({ companyList-> displayData(data)
      },{
          Toast.makeText(applicationContext, it.message, 
          Toast.LENGTH_SHORT).show()
      })
   )
}
 类似资料:
  • 我想把sqlite数据转换成jsonarray,但我遇到了一些问题,我写了这段代码,用hasmap从sqlite解析到arraylist并用它把它更改为json,用gson转换 这就是如何解析它

  • 我正试图从这个服务器响应中提取“级别”。我对Android开发有点陌生。我需要帮助解析这个API响应到一个POJO列表。 级别的kotlin数据类:

  • 首先,我是Android/Java/Kotlin开发的新手。我正在使用reverfit2从Udacity API检索数据。我可以在Logcat中看到响应,但当我试图在RecyclerView中显示它时,只有一个空白屏幕。我认为错误是在MainActivity中,但我仍然一无所知,需要帮助。 我的模型类 我的接口 我的适配器 我的主要活动--我想错误就在这里,但我还没弄明白 改型实例的初始值设定项类

  • 我刚刚开始使用Retrofit2,我使用的API将所有有效的响应包装在一个“Response”对象中,如下所示。我需要告诉Retrofit只解析response中的值,而不实际将它们嵌套在另一个对象中。对于登录代码,我还面临着获取一个字符串的问题,我希望将其转换为实际的时间戳。 在上面仅有的两个实际值是: 我希望最终得到如下所示的东西。

  • 我有一个recyclerview有不同的肖像和景观布局。当活动开始时,不管方向如何,recyclerview都会填充数据。但如果改变了方向,则不会显示任何数据。并且没有显示相应的方向变化的数据。