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
Hope this helps!
Post a Comment for "How To Load Data(json) Into Recycler View Using Volley"