Нет ошибки в журнале, но RecyclerView не отображает никакого значения JSON-Нет ошибки в коде тоже --- залп - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь отобразить имя и возраст из массива JSON в HomeFragment.У меня есть модель, данные и пакет пользовательского интерфейса.Я не вижу никаких ошибок в коде или журнале, но я не получаю вывод в моей деятельности.Я получаю вывод JSON в своем журнале ответов, и цикл Commented for работает в recyclerview, но если я использую реальное значение JSON, то фрагмент не отображает никаких значений.Ваша помощь приветствуется.

Home Fragment.kt
    class HomeFragment : Fragment() {

    private var adapter:PersonListAdapter?=null
    private var personList:ArrayList<Person>?=null
    private var layoutManager: RecyclerView.LayoutManager?=null


    var volleyRequest: RequestQueue?=null

    val SchoolLink="https://www.abc.app/"

//JSON Output
//[{"name":"AAA","age":"20"},{"name":"BBBB","age":"30"}]
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
        volleyRequest= Volley.newRequestQueue(this.context)

    val view = inflater.inflate(R.layout.fragment_home, container, false)
        val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
        personList=ArrayList<Person>()
        layoutManager= LinearLayoutManager(this.context)
        adapter= PersonListAdapter(personList,this.context!!)
        recyclerView.layoutManager=layoutManager
        recyclerView.adapter=adapter

        /*
        for (i in 0..16) {
            val person = Person()
            person.name="Hello" + i
            person.age = 20 + i
            personList!!.add(person)

        }*/


        val jsonArray=JsonArrayRequest(Request.Method.GET,SchoolLink,
                Response.Listener {
                    response: JSONArray ->

                    try {
                        Log.d("Response from JSON",response.toString())

                        for(i in 0..response.length()-1)
                        {
val person = Person()
                            val SchoolObj=response.getJSONObject(i)
                            var name=SchoolObj.getString("name")
person.name=name
                            Log.d("name from JSON",name)

                            var age:String=SchoolObj.getString("age")
person.age=age.toDouble()
                            Log.d("age from JSON",age)
personList!!.add(person)

                        }
 adapter!!.notifyDataSetChanged()
                    } catch (e:JSONException){e.printStackTrace()}
                },

                Response.ErrorListener {
                    error ->

                    try {
                        Log.d("Error",error.toString())
                    }
                    catch (e: JSONException){e.printStackTrace()}
                })

        volleyRequest!!.add(jsonArray)



return view
    }
    fun getJsonArray(Url:String)
    {

    }

}


PersonListAdapter.kt

class PersonListAdapter(private val list: ArrayList<Person>,
                        private val context: Context)
    : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
    override fun getItemCount(): Int {
        return list.size

    }

    override fun onCreateViewHolder(parent: ViewGroup?, position: Int): ViewHolder {
                   val view = LayoutInflater.from(context).inflate(R.layout.list_row, parent, false)

        return ViewHolder(view)


    }

    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {

        holder?.bindItem(list[position])


    }


     inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
         fun bindItem(person: Person) {
             var name: TextView = itemView.findViewById(R.id.name) as TextView
             var age: TextView = itemView.findViewById(R.id.age) as TextView

             name.text = person.name
             age.text = person.age.toString()



             itemView.setOnClickListener {


                 Toast.makeText(context, name.text, Toast.LENGTH_LONG ).show()
             }

         }

    }


}

1 Ответ

0 голосов
/ 16 декабря 2018

В этой части:

                   for(i in 0..response.length()-1)
                    {
                        val SchoolObj=response.getJSONObject(i)
                        var name=SchoolObj.getString("name")
                        person.name=name
                        Log.d("name from JSON",name)

                        var age:String=SchoolObj.getString("age")
                        person.age=age.toDouble()
                        Log.d("age from JSON",age)

                    }

Вы не добавляете объект персоны в список персон.

                  for(i in 0..response.length()-1)
                    {
                        val person = Person()
                        val SchoolObj=response.getJSONObject(i)
                        var name=SchoolObj.getString("name")
                        person.name=name
                        Log.d("name from JSON",name)

                        var age:String=SchoolObj.getString("age")
                        person.age=age.toDouble()
                        Log.d("age from JSON",age)
                        personList!!.add(person)

                    }
                    adapter!!.notifyDataSetChanged()

Надеюсь, это поможет вам.

...