How to get the ArrayList from JSONObject request?
I tried interface but it doesn't work. Setter and Getter doesn't work too. I am using a RecyclerView.
This is my code,
public class EditDoctor extends Fragment {
RecyclerView recyclerView;
String key;
String url;
RecyclerAdapterEditDoctor edit;
SharedPreferences sharedPreferences;
RequestQueue queue;
ArrayList<EditDoctorModel> listOfPojo = new ArrayList<>();
public EditDoctor()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstaneState)
{
View view = inflater.inflate(R.layout.editdoctor,container,false);
Context context = getActivity();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
key = sharedPreferences.getString("key", "");
return view;
}
@Override
public void onViewCreated(View view,Bundle savedInstanceState) {
setRetainInstance(true);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler1);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
queue = Volley.newRequestQueue(getActivity());
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
key = sharedPreferences.getString("key", "");
url = "http://192.168.0.153:9091/drrate/api/profile/Search?page=1&size=10&filter=[{\"col\":\"MemberKey\",\"val\":\""+key+"\",\"cond\":\"Equal\"}]";
getJSONRequest();
edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo);
recyclerView.setAdapter(edit);
}
// This is the Request
public void getJSONRequest() {
JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
ArrayList<EditDoctorModel>temp = new ArrayList<>();
try {
JSONArray Jarray = response.getJSONArray("Data");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject object = Jarray.getJSONObject(i);
EditDoctorModel editDoctorModel = new EditDoctorModel();
editDoctorModel.setFullName(object.getString("Name"));
editDoctorModel.setProfession(object.getString("Profession"));
editDoctorModel.setUrl(object.getString("Image"));
temp.add(editDoctorModel);
}
// this work but android monitor says that skipping layout adapter not attached
// edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo);
// recyclerView.setAdapter(edit);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(req);
}
Please help me. Thanks in advance.
Neerajlal K
6,8263 gold badges26 silver badges34 bronze badges
2 Answers 2
Making some chages in your code
public class EditDoctor extends Fragment {
RecyclerView recyclerView;
String key;
String url;
RecyclerAdapterEditDoctor edit;
SharedPreferences sharedPreferences;
RequestQueue queue;
ArrayList<EditDoctorModel> listOfPojo;
public EditDoctor()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstaneState)
{
View view = inflater.inflate(R.layout.editdoctor,container,false);
Context context = getActivity();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
key = sharedPreferences.getString("key", "");
return view;
}
@Override
public void onViewCreated(View view,Bundle savedInstanceState) {
setRetainInstance(true);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler1);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
queue = Volley.newRequestQueue(getActivity());
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
key = sharedPreferences.getString("key", "");
url = "http://192.168.0.153:9091/drrate/api/profile/Search?page=1&size=10&filter=[{\"col\":\"MemberKey\",\"val\":\""+key+"\",\"cond\":\"Equal\"}]";
getJSONRequest();
edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo);
recyclerView.setAdapter(edit);
}
// This is the Request
public void getJSONRequest() {
JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
listOfPojo = new ArrayList<>();
try {
JSONArray Jarray = response.getJSONArray("Data");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject object = Jarray.getJSONObject(i);
EditDoctorModel editDoctorModel = new EditDoctorModel();
editDoctorModel.setFullName(object.getString("Name"));
editDoctorModel.setProfession(object.getString("Profession"));
editDoctorModel.setUrl(object.getString("Image"));
listOfPojo.add(editDoctorModel);
}
// this work but android monitor says that skipping layout adapter not attached
// edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo);
// recyclerView.setAdapter(edit);
edit.updateRecyler(listOfPojo);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(req);
}
//Add below method in your adapter
public void updateRecyler(ArrayList<EditDoctorModel> list){
this.your_adapterModel_list=list;
notifyDatasetChanged();
}
Whenever Volley gets response your recyler autmatically update.
answered Sep 2, 2016 at 9:26
Anil Ravsaheb Ghodake
1,5962 gold badges29 silver badges47 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
Add the data you have parsed to the dataset listOfPojo, and call notifyDataSetChanged on the adapter.
Try this,
@Override
public void onResponse(JSONObject response) {
ArrayList<EditDoctorModel> temp = new ArrayList<>();
try {
JSONArray Jarray = response.getJSONArray("Data");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject object = Jarray.getJSONObject(i);
EditDoctorModel editDoctorModel = new EditDoctorModel();
editDoctorModel.setFullName(object.getString("Name"));
editDoctorModel.setProfession(object.getString("Profession"));
editDoctorModel.setUrl(object.getString("Image"));
temp.add(editDoctorModel);
}
// add the data in temp to listOfPojo
listOfPojo.clear();
listOfPojo.addAll(temp);
// notify the adapter that the data has changed
edit.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
answered Sep 2, 2016 at 9:13
Neerajlal K
6,8263 gold badges26 silver badges34 bronze badges
3 Comments
sydney69
this doesnt work my problem is that when i add listofPojo.add(temp); then add this listOfPojo.addAll(temp); also this edit.notifyDataSetChanged(); in recycler none is showing the problem is that data get lost when thread of jsonobjectrequest is done
Neerajlal K
@sydney69 Its
addAll and not add.Neerajlal K
Happy coding. Good luck :)
default
JSONtoo.