java - What is a proper way of getting values from a JSON Volley requset? -
i have json request looking this:
jsonobjectrequest request = new jsonobjectrequest(request.method.get, url, (string) null, new response.listener<jsonobject>() { @override public void onresponse(jsonobject response) { roomarray = parseroomsresponse(response); callback.onsuccess(roomarray); } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror error) { } } this request inside oncreateview() method, , parseroomsresponse() method returns me arraylist wish work inside oncreateview(), proper way of doing thing?
i know ok, must handle everithing inside onsuccess inner class, there way of getting values oncreateview? – zoltan kurtyak
ahh.. see issue now.
the problem here request takes unknown amount of time return response, volley makes these requests asynchronously rather lock ui thread.
if make request in oncreateview, it's unlikely you'll still in oncreateview when response.
you may need rethink flow of code. if fragment's view depends on response request, should make sure request , obtain response before create fragment's view.
a typical approach problem use place holder values until response received. example:
public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_layout, container, false); ... edittext myedittext = (edittext) rootview.findviewbyid(r.id.response_dependent_edittext); myedittext.settext("loading data"); imageview myimageview = (imageview) rootview.findviewbyid(r.id.response_dependent_imageview); myimageview.setimageresource(r.drawable.image_placeholder); ... return rootview; } then can create updateviews method;
private void updateviews(arraylist<myarraytype> myparsedarray) { // extract relevant data array ... // replace place holders in relevant views edittext myedittext = (edittext) getview().findviewbyid(r.id.response_dependent_edittext); myedittext.settext(stringfromparsedarray); imageview myimageview = (imageview) getview().findviewbyid(r.id.response_dependent_imageview); myimageview.setimagedrawable(drawablefromparsedarray); } and call request's onresponse method:
@override public void onresponse(jsonobject response) { myparsedarray = parseresponse(response); updateviews(myparsedresponse); ... }
Comments
Post a Comment