hi guys searching solution problem since 8 days still couldn't find solution implementations used gave me null pointer exception.
well, here issue, creating app allowing user able comment on particular item of list-view, on button click user redirected comments page containing comments related post.
so need button able id of post can write logic on how id query database , display comments specific post
here files related project;
feedlistadapter
public class feedlistadapter extends baseadapter { private activity activity; private layoutinflater inflater; private list<feeditem> feeditems; private listview lv; private feeditem fi; imageloader imageloader = appcontroller.getinstance().getimageloader(); public feedlistadapter(activity activity, list<feeditem> feeditems) { this.activity = activity; this.feeditems = feeditems; } @override public int getcount() { return feeditems.size(); } @override public object getitem(int location) { return feeditems.get(location); } @override public long getitemid(int position) { return position; } @override public view getview(int position, view convertview, viewgroup parent) { if (inflater == null) inflater = (layoutinflater) activity .getsystemservice(context.layout_inflater_service); if (convertview == null) convertview = inflater.inflate(r.layout.feed_item, null); if (imageloader == null) imageloader = appcontroller.getinstance().getimageloader(); textview name = (textview) convertview.findviewbyid(r.id.name); textview timestamp = (textview) convertview .findviewbyid(r.id.timestamp); textview statusmsg = (textview) convertview .findviewbyid(r.id.txtstatusmsg); textview url = (textview) convertview.findviewbyid(r.id.txturl); networkimageview profilepic = (networkimageview) convertview .findviewbyid(r.id.profilepic); feedimageview feedimageview = (feedimageview) convertview .findviewbyid(r.id.feedimage1); final feeditem item = feeditems.get(position); button ops= (button) convertview.findviewbyid(r.id.ops); name.settext(item.getname()); ops.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent myintent = new intent(activity, post.class); activity.startactivity(myintent); } }); // converting timestamp x ago format charsequence timeago = dateutils.getrelativetimespanstring( long.parselong(item.gettimestamp()), system.currenttimemillis(), dateutils.second_in_millis); timestamp.settext(timeago); // chcek empty status message if (!textutils.isempty(item.getstatus())) { statusmsg.settext(item.getstatus()); statusmsg.setvisibility(view.visible); } else { // status empty, remove view statusmsg.setvisibility(view.gone); } // checking null feed url if (item.geturl() != null) { url.settext(html.fromhtml("<a href=\"" + item.geturl() + "\">" + item.geturl() + "</a> ")); // making url clickable url.setmovementmethod(linkmovementmethod.getinstance()); url.setvisibility(view.visible); } else { // url null, remove view url.setvisibility(view.gone); } // user profile pic profilepic.setimageurl(item.getprofilepic(), imageloader); // feed image if (item.getimge() != null) { feedimageview.setimageurl(item.getimge(), imageloader); feedimageview.setvisibility(view.visible); feedimageview .setresponseobserver(new feedimageview.responseobserver() { @override public void onerror() { } @override public void onsuccess() { } }); } else { feedimageview.setvisibility(view.gone); } return convertview; } public void setmylist(list mylistofobjects) { this.feeditems = mylistofobjects; this.notifydatasetchanged(); } } feeditem
public class feeditem { private int id; private string name, status, image, profilepic, timestamp, url; private button but; public feeditem() { } public feeditem(int id, string name, string image, string status, string profilepic, string timestamp, string url, button but) { super(); this.id = id; this.name = name; this.image = image; this.status = status; this.profilepic = profilepic; this.timestamp = timestamp; this.url = url; this.but= but; } public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getimge() { return image; } public void setimge(string image) { this.image = image; } public string getstatus() { return status; } public void setstatus(string status) { this.status = status; } public string getprofilepic() { return profilepic; } public void setprofilepic(string profilepic) { this.profilepic = profilepic; } public string gettimestamp() { return timestamp; } public void settimestamp(string timestamp) { this.timestamp = timestamp; } public string geturl() { return url; } public void seturl(string url) { this.url = url; } } fragmentone
public class fragmentone extends baseactivity { private static final string tag = fragmentone.class.getsimplename(); private listview listview; private feedlistadapter listadapter; private list<feeditem> feeditems; private string url_feed = "http://fomains.esy.es/android_app_api/json.php"; public int pid; private button b1; public cursoradapter me; public arrayadapter my; int global_position =0; feedlistadapter feedi; @suppresslint("newapi") @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); getlayoutinflater().inflate(r.layout.fragment_layout_one, framelayout); mdrawerlist.setitemchecked(position, true); settitle(listarray[position]); listview = (listview) findviewbyid(r.id.list); b1 = (button) findviewbyid(r.id.button); feeditems = new arraylist<feeditem>(); listadapter = new feedlistadapter(this, feeditems); listview.setadapter(listadapter); listview.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { global_position=position; toast.maketext(getapplicationcontext(),""+global_position,toast.length_long).show(); } }); // these 2 lines not needed, // of facebook (changing background color & hiding icon) getactionbar().setbackgrounddrawable(new colordrawable(color.parsecolor("#ff6600"))); getactionbar().seticon( new colordrawable(getresources().getcolor(android.r.color.transparent))); // first check cached request cache cache = appcontroller.getinstance().getrequestqueue().getcache(); entry entry = cache.get(url_feed); if (entry != null) { // fetch data cache try { string data = new string(entry.data, "utf-8"); try { parsejsonfeed(new jsonobject(data)); } catch (jsonexception e) { e.printstacktrace(); } } catch (unsupportedencodingexception e) { e.printstacktrace(); } } else { // making fresh volley request , getting json jsonobjectrequest jsonreq = new jsonobjectrequest(method.get, url_feed, null, new response.listener<jsonobject>() { @override public void onresponse(jsonobject response) { volleylog.d(tag, "response: " + response.tostring()); if (response != null) { parsejsonfeed(response); } } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror error) { volleylog.d(tag, "error: " + error.getmessage()); } }); // adding request volley request queue appcontroller.getinstance().addtorequestqueue(jsonreq); } b1.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v) { intent myintent = new intent(fragmentone.this, post.class); fragmentone.this.startactivity(myintent); } }); listview.invalidateviews(); } /** * parsing json reponse , passing data feed view list adapter * */ private void parsejsonfeed(jsonobject response) { try { jsonarray feedarray = response.getjsonarray("feed"); (int = feedarray.length()-1 ; >=0 ; i--) { jsonobject feedobj = (jsonobject) feedarray.get(i); feeditem item = new feeditem(); item.setid(feedobj.getint("id")); item.setname(feedobj.getstring("name")); pid = feedobj.getint("id"); // image might null string image = feedobj.isnull("image") ? null : feedobj .getstring("image"); item.setimge(image); item.setstatus(feedobj.getstring("status")); item.setprofilepic(feedobj.getstring("profilepic")); item.settimestamp(feedobj.getstring("timestamp")); // url might null string feedurl = feedobj.isnull("url") ? null : feedobj .getstring("url"); item.seturl(feedurl); feeditems.add(item); } listview.invalidateviews(); // notify data changes list adapater listadapter.notifydatasetchanged(); } catch (jsonexception e) { e.printstacktrace(); } } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.menu_main, menu); return true; } well above code getting data database , displaying using custom list adapter
so guys can me out problem
you not using viewholder pattern, suggest use viewholder pattern can use follows,
class viewholder { textview name; textview timestamp; textview statusmsg; textview url; feedimageview feedimageview; networkimageview profilepic; button ops; } @override public view getview(final int position, view convertview, viewgroup parent) { final viewholder viewholder; if (convertview == null) { layoutinflater layoutinflater = (layoutinflater) context.getsystemservice(layout_inflater_service); viewholder = new viewholder(); viewholder.name = (textview) convertview.findviewbyid(r.id.name); viewholder.timestamp = (textview) convertview .findviewbyid(r.id.timestamp); viewholder.statusmsg = (textview) convertview .findviewbyid(r.id.txtstatusmsg); viewholder.url = (textview) convertview.findviewbyid(r.id.txturl); viewholder.profilepic = (networkimageview) convertview .findviewbyid(r.id.profilepic); viewholder.feedimageview = (feedimageview) convertview .findviewbyid(r.id.feedimage1); viewholder.ops = (button) convertview.findviewbyid(r.id.ops); convertview.settag(viewholder); } else { viewholder = convertview.gettag(); viewholder.ops.settag(null); } viewholder.ops.settag(/*give id whatever u want to*/); /* follow other part of code */ } in on click method of button ops can tag same , use query db.
hope helps cheers!!
Comments
Post a Comment