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

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -