android - Accessing volley response with callback interfaces -
i m trying extract android volley response member variable of same class. used callback interfaces perform task :
public void getdata(mycustomlistener customlistener) { jsonarrayrequest arrayrequest = new jsonarrayrequest(request.method.post, url, response -> { log.i("response",response.tostring()); customlistener.onresponse(completecart); }, error -> log.i("volley_error", error.getmessage())) { ... customerlistener interface:
public interface mycustomlistener { public void onresponse(object response); public void onerror(string error_response); } and inside oncreateview method of fragment :
getdata(new mycustomlistener() { @override public void onresponse(object response) { completecartproitems.addall((list<completecartproitem>) response); } @override public void onerror(string error_response) {} }); when put debug pointer @ completecartproitems.addall((list<completecartproitem>) response); response not empty completecartproitems arraylist shown empty.
variables :
i need pass completecartproitems adapter named cartitem_scrolleradapter has implemented recycleview.
this implementation inside oncreateview of fragment. right after calling getdata() method :
cart_item_scrolleradapter = new cartitem_scrolleradapter(getactivity(), completecartproitems); i put debug pointer inside constructor of cartitem_scrolleradapter well.
but shows list parameter of constructor empty.
how pass not empty arraylist adapter given below ?? suggestions appreciable. thank you.
update
adapter class :
public class cartitem_scrolleradapter extends recyclerview.adapter<cartitem_scrolleradapter.cartitemviewholder> { private layoutinflater inflater; private list<completecartproitem> completecartproitems = new arraylist<>(); private context context; public cartitem_scrolleradapter(context context, list<completecartproitem> completecartproitems) { this.inflater = layoutinflater.from(context); this.context = context; this.completecartproitems = completecartproitems; } @override public cartitemviewholder oncreateviewholder(viewgroup parent, int viewtype) { view view = inflater.inflate(r.layout.cart_item, parent, false); cartitemviewholder cartitemviewholder = new cartitemviewholder(view); return cartitemviewholder; } @override public void onbindviewholder(cartitemviewholder holder, int position) { completecartproitem proitem = completecartproitems.get(position); cartdetails details = (cartdetails) myapplication.getandroidsession().getattribute("cart"); holder.cart_pro_name.settext(proitem.getp_name()); holder.cart_pro_price.settext("rs " + (proitem.getp_dscper() != 0 ? details.getdiscountprice(proitem.getp_price(), proitem.getp_dscper()) : proitem.getp_price())); holder.cart_pro_qnty.settext(details.getqntyofproduct(proitem.getpid(), proitem.getp_size()) + ""); holder.cart_pro_size.settext(proitem.getp_size()); string image_url = "http://10.0.2.2:8080/ecommerceapp/" + proitem.getp_img(); picasso.with(context).load(image_url).into(holder.cart_pro_img); } @override public int getitemcount() { return completecartproitems != null ? completecartproitems.size() : 0; } class cartitemviewholder extends recyclerview.viewholder implements view.onclicklistener { textview cart_pro_name; textview cart_pro_price; textview cart_pro_qnty; textview cart_pro_size; imageview cart_pro_img; imagebutton cart_remove_btn; button cart_change; public cartitemviewholder(view itemview) { super(itemview); cart_pro_name = (textview) itemview.findviewbyid(r.id.cart_item_product_name); cart_pro_price = (textview) itemview.findviewbyid(r.id.cart_item_product_price); cart_pro_size = (textview) itemview.findviewbyid(r.id.cart_item_size); cart_pro_img = (imageview) itemview.findviewbyid(r.id.cart_product_img); cart_pro_qnty = (textview) itemview.findviewbyid(r.id.cart_item_qnty); //=============================================================================================== cart_remove_btn = (imagebutton) itemview.findviewbyid(r.id.remove_item_btn); cart_change = (button) itemview.findviewbyid(r.id.cart_item_change_btn); cart_pro_img.setonclicklistener(this); cart_remove_btn.setonclicklistener(this); cart_change.setonclicklistener(this); } @override public void onclick(view v) { } } } fragment :
public class cartfragment extends fragment { private recyclerview cart_horizontal_scroller; private cartitem_scrolleradapter cart_item_scrolleradapter; private button purchase_button; private list<completecartproitem> completecartproitems = new arraylist<>(); public cartfragment() { // required empty public constructor } public void getdata(mycustomlistener<completecartproitem> customlistener) { if (myapplication.getandroidsession().getattribute("cart") != null) { log.i("cart_null", "not null"); requestqueue requestqueue = volleysingleton.getsinstance().getrequestqueue(); cartdetails cartdetails = (cartdetails) myapplication.getandroidsession().getattribute("cart"); copyonwritearraylist<cartitem> jsonsendarray = cartdetails.getshoppinglist(); final string jsonstring = new gson().tojson(jsonsendarray, new typetoken<copyonwritearraylist<cartitem>>() { }.gettype()); log.i("json_object", jsonstring); string url = "http://10.0.2.2:8080/ecommerceapp/getallproductsaction"; jsonarrayrequest arrayrequest = new jsonarrayrequest(request.method.post, url, response -> { list<completecartproitem> completecart = new gson().fromjson(response.tostring(), new typetoken<list<completecartproitem>>() { }.gettype()); log.i("response", completecart.get(0).getp_name()); customlistener.onresponse(completecart); }, error -> log.i("volley_error", error.getmessage())) { @override public map<string, string> getheaders() throws authfailureerror { map<string, string> params = new hashmap<>(); params.put("content-type", "application/json"); params.put("cartlist", jsonstring); return params; } }; arrayrequest.setretrypolicy(new retrypolicy() { @override public int getcurrenttimeout() { return 5000; } @override public int getcurrentretrycount() { return 5000; } @override public void retry(volleyerror error) throws volleyerror { } }); requestqueue.add(arrayrequest); } else { log.i("cart_null", "null"); } } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment view view = inflater.inflate(r.layout.fragment_cart, container, false); cart_horizontal_scroller = (recyclerview) view.findviewbyid(r.id.horizontal_scrollview_cart_items); getdata(new mycustomlistener<completecartproitem>() { @override public void onresponse(list<completecartproitem> response) { completecartproitems.addall(response); //completecartproitems.add(new completecartproitem(1, 2340.0, "extra orient top", "orient", "", "s", 5)); log.i("check", completecartproitems.get(0).getp_name()); } @override public void onerror(string error_response) { } }); cart_item_scrolleradapter = new cartitem_scrolleradapter(getactivity(), completecartproitems); cart_horizontal_scroller.setadapter(cart_item_scrolleradapter); cart_horizontal_scroller.setlayoutmanager(new linearlayoutmanager(getactivity(), linearlayoutmanager.horizontal, false)); purchase_button = (button) view.findviewbyid(r.id.purchase_btn); purchase_button.setonclicklistener(v -> { toast t = toast.maketext(getactivity(), "worked", toast.length_long); t.show(); }); return view; } }
ok. in reference comment above, writing steps should try since not have clear picture of might wrong.
let's start mycustomlistener. not know why setting response type object. if use in multiple requests can modify following generics
public interface mycustomlistener<t> { public void onresponse(t response); public void onerror(string error_response); } then use when callback needed
getdata(new mycustomlistener<list<completecartproitem>>() { @override public void onresponse(list<completecartproitem> response) { completecartproitems.addall(response); } @override public void onerror(string error_response) { //handle error } }); also make sure not re-initialising completecartproitems elsewhere after callback.
not sure if following fix issue make sure callback executed in ui thread, too.



Comments
Post a Comment