【问题标题】:list is not getting in recyclerview using retrofit列表未使用改造进入 recyclerview
【发布时间】:2020-10-15 05:48:16
【问题描述】:

基本上我正在尝试使用改造和视图模型在 recyclerview 中显示列表........

在调试 onresponse 时我得到了200 response,但为什么它没有在 recyclerview 中显示列表我不知道我哪里出错了

如果需要我会发布更多代码

以下是代码:---

class Tables : BaseClassActivity() {
lateinit var recyclerView: RecyclerView
lateinit var recyclerAdapter: TableAdapter

 var Tablelist : MutableList<Tabledata> = mutableListOf()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.table_activity)
    var mActionBarToolbar = findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbartable);
    setSupportActionBar(mActionBarToolbar);
    setScreenTitle("Tables")

    recyclerView = findViewById(R.id.recyleview)

    val model = ViewModelProviders.of(this)[HeroViewModel::class.java]

    model.heroes?.observe(this,object :Observer<Table_response>{
        override fun onChanged(t: Table_response?) {
            recyclerAdapter = TableAdapter(applicationContext, Tablelist)
            recyleview.layoutManager = LinearLayoutManager(applicationContext)
            recyclerView.addItemDecoration(
                DividerItemDecoration(
                    recyclerView.context,
                    DividerItemDecoration.VERTICAL
                )
            )
            recyleview.adapter = recyclerAdapter            }

    })

    }

HeroViewModel:--

class HeroViewModel : ViewModel() {
var recyclerAdapter: TableAdapter?=null

private var heroList: MutableLiveData<Table_response>? = null
val heroes: MutableLiveData<Table_response>?
    get() {
        //if the list is null
        if (heroList == null) {
            heroList = MutableLiveData<Table_response>()
            //we will load it asynchronously from server in this method
            loadHeroes()
        }

        //finally we will return the list
        return heroList
    }

//This method is using Retrofit to get the JSON data from URL
private fun loadHeroes() {

    RetrofitClient.instance.getAllPhotos(product_category_id = "1", value = 1).enqueue(
        object : Callback<Table_response> {
            override fun onFailure(call: Call<Table_response>, t: Throwable) {

            }

            override fun onResponse(
                call: Call<Table_response>,
                response: Response<Table_response>
            ) {

                if (response.body() != null) {
                    val res = response
                    heroList!!.value = response.body()

                    recyclerAdapter?.setMovieListItems((response.body()?.data as MutableList<Tabledata>?)!!)
                }
            }

        })
}

}

需要帮助谢谢....

【问题讨论】:

    标签: android kotlin retrofit retrofit2 viewmodel


    【解决方案1】:

    每次您的 Activity 中有 onChanged() 回调时,您都在传递空列表,并且您试图从从未创建的 ViewModel 中设置 TableAdapter 上的响应。你不应该这样做,你应该做的是你应该移动这段代码:

    recyclerAdapter?.setMovieListItems((response.body()?.data as MutableList<Tabledata>?)!!)
    

    在这里:

    model.heroes?.observe(this,object :Observer<Table_response>{
            override fun onChanged(t: Table_response?) {
                recyclerAdapter = TableAdapter(applicationContext, Tablelist)
                recyleview.layoutManager = LinearLayoutManager(applicationContext)
                recyclerView.addItemDecoration(
                    DividerItemDecoration(
                        recyclerView.context,
                        DividerItemDecoration.VERTICAL
                    )
                )
                
                recyclerAdapter.setMovieListItems(t?.data as MutableList<Tabledata>?)
                recyleview.adapter = recyclerAdapter            }
    
        })
    

    并从 ViewModel 中移除适配器。

    【讨论】:

    • 如果我将其移至onchanged,我在响应变量response.body()?.data as MutableList&lt;Tabledata&gt; 中出现错误
    • 嘿,你能帮帮我吗--> stackoverflow.com/questions/64352752/…
    • 嘿,我认为那里发布的代码很好,但是 OP 没有发布用于答案的依赖项。我留下了评论,您可以尝试使用那里发布的代码,但尝试添加这些依赖项:implementation "androidx.activity:activity-ktx:1.1.0
    • 实际上我试图使用我在上面发布的代码进行登录..就像使用viewmodelprovider.of 那样发布的答案非常复杂......我很困惑我是否使用上面的代码进行登录
    • 让我们在那里讨论
    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2018-06-11
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多