【问题标题】:Recycler View not showing JSON data in kotlin回收站视图未在 kotlin 中显示 JSON 数据
【发布时间】:2020-08-09 08:37:12
【问题描述】:

这是我使用 volley 在 ArrayList 中添加 JASON 数据的主要课程。 Toast 显示 JASON 数据,但数组不显示任何数据。我正在尝试解决过去 3 天的错误。 我也在堆栈上阅读了很多问题,但我没有解决方案请帮助我

 var item = ArrayList<dumy_item_list>()
        var url = "https://apps.faizeqamar.website/charity/api/organizations"
        var rq: RequestQueue = Volley.newRequestQueue(this)
        var sr = StringRequest(Request.Method.GET, url, Response.Listener { response ->
            var jsonResponse = JSONObject(response)
            var jsonArray: JSONArray = jsonResponse.getJSONArray("data")
            for (i in 0..jsonArray.length() - 1) {
                var jsonObject: JSONObject = jsonArray.getJSONObject(i)
                var name = jsonObject.getString("name")
                val data = dumy_item_list()
                data.setName(jsonObject.getString(name))
                item.add(data)
                Toast.makeText(applicationContext, "NGO Name is : $name", Toast.LENGTH_LONG).show()
            }
        },
            Response.ErrorListener { error ->

                Toast.makeText(applicationContext, error.message, Toast.LENGTH_LONG).show()
            })

        rq.add(sr)
        var away_recycler = findViewById<RecyclerView>(R.id.away_recycler)

        var adaptor = custom_adopter(item, applicationContext)

        away_recycler.layoutManager = GridLayoutManager(applicationContext, 1)

        away_recycler.adapter = adaptor


    }

这是我使用 getName() 函数的适配器类

class custom_adopter(data: ArrayList<dumy_item_list>, var context: Context) :
    RecyclerView.Adapter<custom_adopter.viewHolder>() {
    var data: List<dumy_item_list>
    init {
        this.data = data
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): custom_adopter.viewHolder {

        var layout = LayoutInflater.from(context).inflate(R.layout.dumy_item, parent, false)
        return viewHolder(layout)
    }
    override fun onBindViewHolder(holder: custom_adopter.viewHolder, position: Int) {
        holder.tv_dummy_name_donnor.text = data[position].getName()
        holder.card.setOnClickListener {
            var intent = Intent(context, ngosProfile::class.java)
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            startActivity(context, intent, null)
        }
    }
    override fun getItemCount(): Int {
        return data.size
    }
    class viewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        internal var tv_dummy_name_donnor: TextView
        internal var card: CardView
        init {
            tv_dummy_name_donnor = itemView.findViewById(R.id.tv_dummy_name_donnor)
            card = itemView.findViewById(R.id.card)
        }
    }
}

【问题讨论】:

    标签: android json kotlin android-recyclerview android-volley


    【解决方案1】:

    按照此代码为我工作。 (var adaptor = custom_adopter(item, applicationContext) away_recycler.adapter = adaptor progressBar2?.visibility = View.INVISIBLE ) 在循环后将值发送给适配器。

    class MainActivity : AppCompatActivity() {
    
        var progressBar2:ProgressBar?=null
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            var item = ArrayList<dumy_item_list>()
            var progressBar2 = findViewById<ProgressBar>(R.id.progressBar2)
            var away_recycler = findViewById<RecyclerView>(R.id.away_recycler)
            away_recycler.layoutManager = GridLayoutManager(applicationContext, 1)
    
            var url = "https://apps.faizeqamar.website/charity/api/organizations"
            var rq: RequestQueue = Volley.newRequestQueue(this)
    
                var sr = StringRequest(Request.Method.GET, url, Response.Listener { response ->
                    var jsonResponse = JSONObject(response)
                    var jsonArray: JSONArray = jsonResponse.getJSONArray("data")
                    for (i in 0..jsonArray.length() - 1) {
                        var jsonObject: JSONObject = jsonArray.getJSONObject(i)
                       var name = jsonObject.getString("ngo_name")
                       var about = jsonObject.getString("ngo_desc")
                        item.add(dumy_item_list(name,about))
    
    
                    }
                    var adaptor = custom_adopter(item, applicationContext)
                    away_recycler.adapter = adaptor
                    progressBar2?.visibility = View.INVISIBLE
    
    
    
                },
                    Response.ErrorListener { error ->
    
                    })
    
                rq.add(sr)
    
            }
    

    【讨论】:

      【解决方案2】:

      我猜你有所有项目的 RecyclerView,但它们是空的 所以问题应该是你在哪里填写你的适配器列表。在下面这一行中:

      data.setName(jsonObject.getString(name))
      

      一定是这样的

      data.setName(name)
      

      data.setName(jsonObject.getString("name"))
      

      【讨论】:

      • 首先非常感谢您回复我。先生,这两条线都不适合我,我已经尝试过了,先生,当我在我的真实设备中安装 apk 时有一些时间数据显示,但安装后需要 15 到 20 分钟
      • 这是不同的事情。在获取和显示数据之间分开。当 Toast 消息出现时..这意味着数据来了 & 获取数据是好的,当正确的名称显示在 Toast 中时。这意味着您使用 JSONObject 的正确键,毕竟,开始关注显示数据。
      • 现在。返回到您的问题,您在数据到来之前将item ArrayList 传递给适配器,因此尝试将创建和分配适配器移动到响应块内的recyclerView..上方/下方Toast消息,或者只需在响应块内调用adapter.notifyDataSetChange()..上方/在 Toast 消息下方
      【解决方案3】:

      数据加载到列表后,应调用适配器的 notifyDataSetChanged 方法,以通知有新数据。

      【讨论】:

      • 非常感谢您回答我。先生,问题是数据没有加载到列表中。当我将数据存储在变量中时,它存储得很好,但是当我存储在 arrayList 中时,数据没有存储
      猜你喜欢
      • 2021-10-01
      • 2021-06-18
      • 1970-01-01
      • 2021-08-25
      • 2020-06-06
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多