1
votes

La vue du recycleur n'affiche pas les données JSON dans Kotlin

Voici ma classe principale où j'ajoute des données JASON dans ArrayList en utilisant volley. Toast affiche les données JASON mais le tableau n'affiche aucune donnée. J'essaye de résoudre mon erreur des 3 derniers jours. J'ai également lu de nombreuses questions sur la pile mais je n'ai pas de solution pour cela, aidez-moi.

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)
        }
    }
}

Voici ma classe d'adaptateur où j'utilise la fonction getName ()

 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


    }


0 commentaires

3 Réponses :


0
votes

Je suppose que vous avez le RecyclerView avec tous les éléments, mais ils sont vides le problème devrait donc être celui où vous remplissez la liste de votre adaptateur..dans cette ligne ci-dessous exactement:

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

cela doit être quelque chose comme

data.setName(name)

OU

data.setName(jsonObject.getString(name))


3 commentaires

Tout d'abord merci beaucoup de m'avoir répondu. monsieur les deux lignes ne fonctionnent pas pour moi j'essaie déjà ceci, monsieur certaines données de temps apparaissent lorsque j'installe l'apk dans mon appareil réel mais cela prend 15 à 20 minutes après l'installation


c'est une chose différente. séparer les données de récupération et d'affichage. lorsque le message Toast apparaît .. cela signifie que les données sont arrivées et que la récupération des données est OK, lorsque le nom correct s'affiche dans Toast. cela signifie que vous utilisez la clé appropriée avec JSONObject, après tout cela, commencez à vous concentrer sur les données d'affichage.


à présent. revenez à votre problème, vous transmettez item ArrayList à l'adaptateur avant l'arrivée des données, alors essayez de déplacer l'adaptateur create & assign vers recyclerView à l'intérieur du bloc de réponse..au-dessus / en dessous du message Toast, OU appelez simplement l'adaptateur .notifyDataSetChange () dans le bloc de réponse .. au-dessus / au-dessous du message Toast



0
votes

Vous devez appeler la méthode notifyDataSetChanged de l'adaptateur après le chargement des données dans votre liste afin d'informer qu'il y a de nouvelles données.


1 commentaires

Merci beaucoup de m'avoir répondu. Monsieur le problème est que les données ne sont pas chargées dans la liste.Lorsque je stocke les données dans une variable, elles sont parfaitement stockées, mais lorsque je stocke dans arrayList que les données non stockées



0
votes

suivez ce code ce travail pour moi. (var adapter = custom_adopter (item, applicationContext) away_recycler.adapter = adapter progressBar2? .visibility = View.INVISIBLE) singe la valeur à l'adaptateur après la boucle.

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 commentaires