Recycler View не показывает данные Джейсона в kotlin - PullRequest
0 голосов
/ 25 апреля 2020

вот мой основной класс, в который я добавляю данные json в ArrayList, используя залп. Toast показывает данные json, но массив не показывает никаких данных. я пытаюсь исправить свою ошибку за последние 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


    }

вот мой класс адаптера wher я использую функцию 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)
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 25 апреля 2020

Вы должны вызвать метод notifyDataSetChanged адаптера после загрузки данных в ваш список, чтобы сообщить, что есть новые данные.

0 голосов
/ 28 апреля 2020

следуйте этому коду, эта работа для меня. (var adaptor = custom_adopter(item, applicationContext) away_recycler.adapter = adaptor progressBar2?.visibility = View.INVISIBLE ) передать значение в адаптер после l oop.

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)

        }
0 голосов
/ 25 апреля 2020

Я полагаю, что у вас есть RecyclerView со всеми элементами, но они пусты, поэтому проблема должна заключаться в том, где вы должны заполнить список своего адаптера ... именно в этой строке ниже:

data.setName(jsonObject.getString(name))

это должно быть что-то вроде

data.setName(name)

ИЛИ

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