Skip to content Skip to sidebar Skip to footer

How To Load Data(json) Into Recycler View Using Volley

I have implemented recyclerview in my application and now i need to fetch data from the server and i just came to know about volley being the best way to fetch data. I searched onl

Solution 1:

You can try as my following solution:

Let's assume the server response as the following JSON:

[{"name":"Person 1","age":30},{"name":"Person 2","age":20},{"name":"Person 3","age":40}]

In your Android project:

publicclassPerson {
    String name;
    Integer age;

    Person() {
    }    
}


publicclassRVAdapterextendsRecyclerView.Adapter<RVAdapter.PersonViewHolder> {
    List<Person> persons;

    RVAdapter(List<Person> persons) {
        this.persons = persons;
    }

    @Overridepublic PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Viewv= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);
        PersonViewHolderpvh=newPersonViewHolder(v);
        return pvh;
    }

    @OverridepublicvoidonBindViewHolder(PersonViewHolder holder, int position) {
        holder.personName.setText(persons.get(position).name);
        holder.personAge.setText(String.valueOf(persons.get(position).age));
    }

    @OverridepublicintgetItemCount() {
        if (persons != null) {
            return persons.size();
        }
        return0;
    }

    @OverridepublicvoidonAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    publicstaticclassPersonViewHolderextendsRecyclerView.ViewHolder {
        CardView cv;
        TextView personName;
        TextView personAge;

        PersonViewHolder(View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cv);
            personName = (TextView) itemView.findViewById(R.id.person_name);
            personAge = (TextView) itemView.findViewById(R.id.person_age);
        }
    }
}

Then in your Activity:

        ...
        RecyclerViewrv= (RecyclerView)findViewById(R.id.rv);
        rv.setHasFixedSize(true);

        LinearLayoutManagerllm=newLinearLayoutManager(mContext);
        rv.setLayoutManager(llm);

        finalRVAdapterrvAdapter=newRVAdapter(personList);
        rv.setAdapter(rvAdapter);

        RequestQueuerequestQueue= Volley.newRequestQueue(mContext);
        Stringurl="http://192.16.1.100/api/persons";

        JsonArrayRequestjsonArrayRequest=newJsonArrayRequest(url, newResponse.Listener<JSONArray>() {
            @OverridepublicvoidonResponse(JSONArray response) {
                try {
                    if (response.length() > 0) {
                        personList.clear();
                        for (inti=0; i < response.length(); i++) {
                            JSONObjectjsonObject= response.getJSONObject(i);
                            Personperson=newPerson();
                            if (!jsonObject.isNull("name")) {
                                person.name = jsonObject.getString("name");
                            }
                            if (!jsonObject.isNull("age")) {
                                person.age = jsonObject.getInt("age");
                            }
                            personList.add(i, person);
                        }
                        rvAdapter.notifyDataSetChanged();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, newResponse.ErrorListener() {
            @OverridepublicvoidonErrorResponse(VolleyError error) {
                // do something
            }
        });

        requestQueue.add(jsonArrayRequest);
        ...

Here is the result

enter image description here

Hope this helps!

Post a Comment for "How To Load Data(json) Into Recycler View Using Volley"