i want show 3 fragments
in activity
, load data json in fragments
! want show each json data 1 fragment, in application show of data in fragments! for example : want show article data article fragment, music data music fragment , more ...
when running application, show me error :
fatal exception: main process: com.razemovafaghiat.tellfa.android, pid: 1865 org.greenrobot.eventbus.eventbusexception: subscriber class com.razemovafaghiat.tellfa.android.fragments.free_fragment , super classes have no public methods @subscribe annotation @ org.greenrobot.eventbus.subscribermethodfinder.findsubscribermethods(subscribermethodfinder.java:67) @ org.greenrobot.eventbus.eventbus.register(eventbus.java:136) @ com.razemovafaghiat.tellfa.android.fragments.free_fragment.onresume(free_fragment.java:83) @ android.support.v4.app.fragment.performresume(fragment.java:2020) @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1107) @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1252) @ android.support.v4.app.backstackrecord.run(backstackrecord.java:738) @ android.support.v4.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1617) @ android.support.v4.app.fragmentmanagerimpl.executependingtransactions(fragmentmanager.java:570) @ android.support.v4.app.fragmentpageradapter.finishupdate(fragmentpageradapter.java:141) @ android.support.v4.view.viewpager.populate(viewpager.java:1177) @ android.support.v4.view.viewpager.populate(viewpager.java:1025) @ android.support.v4.view.viewpager.onmeasure(viewpager.java:1545) @ android.view.view.measure(view.java:17496) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5466) @ android.support.design.widget.coordinatorlayout.onmeasurechild(coordinatorlayout.java:664) @ android.support.design.widget.coordinatorlayout.onmeasure(coordinatorlayout.java:731) @ android.view.view.measure(view.java:17496) @ android.support.v4.widget.drawerlayout.onmeasure(drawerlayout.java:1075) @ android.view.view.measure(view.java:17496) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5466) @ android.widget.framelayout.onmeasure(framelayout.java:430) @ android.support.v7.widget.contentframelayout.onmeasure(contentframelayout.java:135) @ android.view.view.measure(view.java:17496) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5466) @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1438) @ android.widget.linearlayout.measurevertical(linearlayout.java:724) @ android.widget.linearlayout.onmeasure(linearlayout.java:615) @ android.view.view.measure(view.java:17496) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5466) @ android.widget.framelayout.onmeasure(framelayout.java:430) @ android.view.view.measure(view.java:17496) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5466) @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1438) @ android.widget.linearlayout.measurevertical(linearlayout.java:724) @ android.widget.linearlayout.onmeasure(linearlayout.java:615) @ android.view.view.measure(view.java:17496) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5466) @ android.widget.framelayout.onmeasure(framelayout.java:430) @ com.android.internal.policy.impl.phonewindow$decorview.onmeasure(phonewindow.java:2636) @ android.view.view.measure(view.java:17496) @ android.view.viewrootimpl.performmeasure(viewrootimpl.java:2031) @ android.view.viewrootimpl.measurehierarchy(viewrootimpl.java:1193) @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1400) @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1078) @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:5875) @ android.view.choreographer$callbackrecord.run(choreographer.java:767) @ android.view.choreographer.docallbacks(choreographer.java:580) @ android.view.choreographer.doframe(choreographer.java:550) @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:753) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activityt 06-06 17:23:29.721 1865-3617/com.razemovafaghiat.tellfa.android e/error: org.json.jsonexception: index 1 out of range [0..1) 06-06 17:23:30.350 1865-3755/com.razemovafaghiat.tellfa.android e/error: org.json.jsonexception: index 1 out of range [0..1)
myevent code:
public class myevent { public string fragmenttag ; private list<datamodel> infomodels = new arraylist<>(); public myevent (string tag,list<datamodel> models){ this.fragmenttag = tag; this.infomodels = models; } }
freedata (asynctask) :
public class freedatainfo { private context mcontext; private string serveraddress = freeserver_ip.getfreeip(); public void getfreedatainfo(context context) { mcontext = context; new getinfo().execute(serveraddress + "limit=10"); } private class getinfo extends asynctask<string, void, string> { eventbus bus = eventbus.getdefault(); private string ou_response; private list<datamodel> infomodels = new arraylist<>(); private progressdialog dialog; @override protected void onpreexecute() { //customprocessdialog.createandshow(mcontext); dialog = new progressdialog(mcontext); this.dialog.setmessage("شکیبا باشید..."); this.dialog.show(); } @override protected string doinbackground(string... params) { okhttpclient client = new okhttpclient(); //string url = (string) params[0]; request request = new request.builder() .url(serveraddress + "limit=10") .cachecontrol(cachecontrol.force_network) .build(); response response; try { response = client.newcall(request).execute(); ou_response = response.body().string(); response.body().close(); if (ou_response != null) { try { jsonobject postobj = new jsonobject(ou_response); jsonarray postsarray = postobj.optjsonarray("result"); (int = 0; <= postsarray.length(); i++) { jsonobject postobject = (jsonobject) postsarray.get(i); int id = postobject.getint("id"); log.d("id", string.valueof(id)); string title = postobject.getstring("title"); string description = postobject.getstring("description"); string image = postobject.getstring("image"); string category = postobject.getstring("categoryname"); string date = postobject.getstring("publishdate"); log.d("data", "post id: " + id); log.d("data", "post title: " + title); log.d("data", "post image: " + image); log.d("data", "---------------------------------"); //use title , id per requirement infomodels.add(new datamodel(id, title, description, category, date, image)); } } catch (jsonexception e) { e.printstacktrace(); log.e("error", string.valueof(e)); } } } catch (ioexception e) { e.printstacktrace(); log.e("error2", string.valueof(e)); } return ou_response; } @override protected void onpostexecute(string result) { //customprocessdialog.dissmis(); //stop progress if (dialog.isshowing()) { dialog.dismiss(); } if (result != null) { bus.post(new myevent("forfragment1", infomodels)); } else { toast.maketext(mcontext, "empty", toast.length_short).show(); } } } }
paiddata (asynctask) :
public class paiddatainfo { private context mcontext; private string serveraddress = paidserver_ip.getpaidip(); public void getpaiddatainfo(context context) { mcontext = context; new getinfo().execute(serveraddress + "limit=10"); } private class getinfo extends asynctask<string, void, string> { eventbus bus = eventbus.getdefault(); private string ou_response; private list<datamodel> infomodels = new arraylist<>(); private progressdialog dialog; @override protected void onpreexecute() { //customprocessdialog.createandshow(mcontext); //infomodels = new arraylist<>(); // initiate progress dialog = new progressdialog(mcontext); this.dialog.setmessage("شکیبا باشید..."); this.dialog.show(); } @override protected string doinbackground(string... params) { okhttpclient client = new okhttpclient(); //string url = (string) params[0]; request request = new request.builder() .url(serveraddress + "limit=10") .cachecontrol(cachecontrol.force_network) .build(); response response; try { response = client.newcall(request).execute(); ou_response = response.body().string(); response.body().close(); if (ou_response != null) { try { jsonobject postobj = new jsonobject(ou_response); jsonarray postsarray = postobj.optjsonarray("result"); infomodels = new arraylist<>(); (int = 0; <= postsarray.length(); i++) { jsonobject postobject = (jsonobject) postsarray.get(i); int id = postobject.getint("id"); log.d("id", string.valueof(id)); string title = postobject.getstring("title"); string description = postobject.getstring("full_description"); string image = postobject.getstring("image"); string category = postobject.getstring("categoryname"); string date = postobject.getstring("publishdate"); log.d("data", "post id: " + id); log.d("data", "post title: " + title); log.d("data", "post desc: " + description); log.d("data", "post image: " + image); log.d("data", "---------------------------------"); //use title , id per requirement infomodels.add(new datamodel(id, title, description, category, date, image)); } } catch (jsonexception e) { e.printstacktrace(); log.e("error", string.valueof(e)); } } } catch (ioexception e) { e.printstacktrace(); log.e("error2", string.valueof(e)); } return ou_response; } @override protected void onpostexecute(string result) { //stop progress if (dialog.isshowing()) { dialog.dismiss(); } //customprocessdialog.dissmis(); if (result != null) { bus.post(new myevent("forfragment2", infomodels)); } else { toast.maketext(mcontext, "empty", toast.length_short).show(); } } } }
free fragment :
public class free_fragment extends fragment { private recyclerview mrecyclerview; private free_recycler_adapter madapter; private recyclerview.layoutmanager mlayoutmanager; private list<datamodel> datamodels = new arraylist<datamodel>(); private context context; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.fragment_free_layout, container, false); context = getcontext(); /* if (!eventbus.getdefault().isregistered(this)) { eventbus.getdefault().register(this); }*/ loaddata(); ///----- recyclerview ----- mrecyclerview = (recyclerview) view.findviewbyid(r.id.pdf_recyclerview); mrecyclerview.sethasfixedsize(true); mrecyclerview.setlayoutmanager(new linearlayoutmanager(getactivity())); madapter = new free_recycler_adapter(context, datamodels); mrecyclerview.setadapter(madapter); return view; } @subscribe public void onevent(myevent event, list<datamodel> maininfomodels) { /* if (datamodels.size() > 0) { datamodels.remove(datamodels.size() - 1); madapter.notifyitemremoved(datamodels.size()); //madapter.setloaded(); }*/ if (event.fragmenttag.equals("forfragment1")) { madapter.add(maininfomodels); madapter.notifydatasetchanged(); } } private void loaddata() { freedatainfo datainfo = new freedatainfo(); // here getmaindatainfo() should return server response datainfo.getfreedatainfo(context); } @override public void onresume() { super.onresume(); eventbus.getdefault().register(this); } @override public void onpause() { eventbus.getdefault().unregister(this); super.onpause(); } }
paid fragment :
public class paid_fragment extends fragment { private recyclerview mrecyclerview; private paid_recycler_adapter madapter; private recyclerview.layoutmanager mlayoutmanager; private list<datamodel> datamodels = new arraylist<datamodel>(); private context context; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.fragment_paid_layout, container, false); context = getcontext(); /* if (!eventbus.getdefault().isregistered(this)) { eventbus.getdefault().register(this); }*/ loaddata(); ///----- recyclerview ----- mrecyclerview = (recyclerview) view.findviewbyid(r.id.voice_recyclerview); mrecyclerview.sethasfixedsize(true); mrecyclerview.setlayoutmanager(new linearlayoutmanager(getactivity())); madapter = new paid_recycler_adapter(context, datamodels); mrecyclerview.setadapter(madapter); return view; } @subscribe public void onevent(myevent event, list<datamodel> maininfomodels) { /* if (datamodels.size() > 0) { datamodels.remove(datamodels.size() - 1); madapter.notifyitemremoved(datamodels.size()); //madapter.setloaded(); }*/ if (event.fragmenttag.equals("forfragment2")) { madapter.add(maininfomodels); madapter.notifydatasetchanged(); } } private void loaddata() { paiddatainfo datainfo = new paiddatainfo(); // here getmaindatainfo() should return server response datainfo.getpaiddatainfo(context); } @override public void onresume() { super.onresume(); eventbus.getdefault().register(this); } @override public void onpause() { eventbus.getdefault().unregister(this); super.onpause(); } }
how can fix problem? <3
remove list parameter onevent
method. instead use list put event. either require make field public in event or add getter list.
something this:
public class myevent { public string fragmenttag ; private list<datamodel> infomodels = new arraylist(); public myevent (string tag,list<datamodel> models){ this.fragmenttag = tag; this.infomodels = models; } public list<datamodel> getinfomodels() { return infomodels; } }
@subscribe public void onevent(myevent event) { list<datamodel> datamodels = event.getinfomodels(); if (datamodels.size() > 0) { datamodels.remove(datamodels.size() - 1); madapter.notifyitemremoved(datamodels.size()); //madapter.setloaded(); } if (event.fragmenttag.equals("forfragment2")) { madapter.add(maininfomodels); madapter.notifydatasetchanged(); } }