android - ListActivity from SQlite to LIstFragment NullPointerException -
i following tutorial [http://vimaltuts.com/android-tutorials/android-load-image-from-sqlite-to-listview][1] creating list of contacts sqlite db, adding, editing , removing. works perfectly, want change listactivity listfragment. far have not been able it, null pointer exception (see below). wrong fragment cycle think. can please help??
original contacts activity
import com.vimaltuts.mycontacts.r; import android.os.asynctask; import android.os.bundle; import android.app.listactivity; import android.content.intent; import android.database.cursor; import android.view.menu; import android.view.menuitem; public class mycontactsactivity extends listactivity { sqliteconnector sqlcon; private customcontactsadapter custadapter; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); string[] = new string[] { contacts.name, contacts.phone,contacts.mail }; int[] = new int[] { r.id.name, r.id.phone, r.id.email }; custadapter = new customcontactsadapter(this,r.layout.contact_list_item, null, from, to); this.setlistadapter(custadapter); } @override protected void onresume() { super.onresume(); new getcontacts().execute((object[]) null); } @suppresswarnings("deprecation") @override protected void onstop() { cursor cursor = custadapter.getcursor(); if (cursor != null) cursor.deactivate(); custadapter.changecursor(null); super.onstop(); } private class getcontacts extends asynctask<object, object, cursor> { sqliteconnector dbconnector = new sqliteconnector(mycontactsactivity.this); @override protected cursor doinbackground(object... params) { return dbconnector.getallcontacts(); } @override protected void onpostexecute(cursor result) { custadapter.changecursor(result); } } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.activity_my_contacts, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { intent addcontact = new intent(mycontactsactivity.this,addeditcontacts.class); startactivity(addcontact); return super.onoptionsitemselected(item); } }
custom contact adapter
import android.content.context; import android.content.intent; import android.database.cursor; import android.graphics.bitmapfactory; import android.support.v4.widget.simplecursoradapter; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.imagebutton; import android.widget.imageview; import android.widget.textview; public class customcontactsadapter extends simplecursoradapter { private int layout; private imagebutton editbtn; private imagebutton delbtn; layoutinflater inflator; public customcontactsadapter(context context, int layout, cursor c,string[] from, int[] to) { super(context, layout, c, from, to,0); this.layout = layout; inflator= layoutinflater.from(context); } public view newview(context context, cursor cursor, viewgroup parent) { view v = inflator.inflate(layout, parent, false); return v; } @override public void bindview(view v, final context context, cursor c) { final int id = c.getint(c.getcolumnindex(contacts.id)); final string name = c.getstring(c.getcolumnindex(contacts.name)); final string phone = c.getstring(c.getcolumnindex(contacts.phone)); final string email = c.getstring(c.getcolumnindex(contacts.mail)); final string fb = c.getstring(c.getcolumnindex(contacts.fb)); final byte[] image = c.getblob(c.getcolumnindex(contacts.image)); imageview iv = (imageview) v.findviewbyid(r.id.photo); if (image != null) { if (image.length > 3) { iv.setimagebitmap(bitmapfactory.decodebytearray(image, 0,image.length)); } } textview tname = (textview) v.findviewbyid(r.id.name); tname.settext(name); textview tphone = (textview) v.findviewbyid(r.id.phone); tphone.settext(phone); textview temail = (textview) v.findviewbyid(r.id.email); temail.settext(email); final sqliteconnector sqlcon = new sqliteconnector(context); editbtn=(imagebutton) v.findviewbyid(r.id.edit_btn); editbtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent=new intent(context,addeditcontacts.class).setflags(intent.flag_activity_new_task); intent.putextra("id", id); intent.putextra("name", name); intent.putextra("phone", phone); intent.putextra("email", email); intent.putextra("fb", fb); intent.putextra("blob", image); context.startactivity(intent); } }); delbtn=(imagebutton) v.findviewbyid(r.id.del_btn); delbtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { sqlcon.deletecontact(id); intent intent=new intent(context,childrenlistfragment.class).setflags(intent.flag_activity_new_task); context.startactivity(intent); } }); v.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent=new intent(context,viewcontact.class).setflags(intent.flag_activity_new_task); intent.putextra("id", id); intent.putextra("name", name); intent.putextra("phone", phone); intent.putextra("email", email); intent.putextra("fb", fb); intent.putextra("blob", image); context.startactivity(intent); } }); } }
changed contacts activity
public class mycontactsactivity extends listfragment{ sqliteconnector sqlcon; private customcontactsadapter custadapter; @override public void onactivitycreated(bundle savedinstancestate) { super.onactivitycreated(savedinstancestate); activity activity = getactivity(); if (activity != null) { string[] = new string[] { contacts.name, contacts.phone,contacts.mail }; int[] = new int[] { r.id.name, r.id.phone, r.id.email }; customcontactsadapter custadapter = new customcontactsadapter(activity,r.layout.contact_list_item, null, from, to); this.setlistadapter(custadapter); sqliteconnector dbconnector = new sqliteconnector(activity); } } @override public void onresume() { super.onresume(); new getcontacts().execute((object[]) null); } @suppresswarnings("deprecation") @override public void onstop() { cursor cursor = custadapter.getcursor(); if (cursor != null) cursor.deactivate(); custadapter.changecursor(null); super.onstop(); } private class getcontacts extends asynctask<object, object, cursor> { activity activity = getactivity(); sqliteconnector dbconnector = new sqliteconnector(activity); @override protected cursor doinbackground(object... params) { return dbconnector.getallcontacts(); } @override protected void onpostexecute(cursor result) { if (isdestroyed) return; custadapter.changecursor(result); } } public void oncreateoptionsmenu(menu menu,menuinflater inflater) { //getactivity().getmenuinflater().inflate(r.menu.activity_my_contacts, menu); super.oncreateoptionsmenu(menu, inflater); menu.clear(); inflater.inflate(r.menu.activity_my_contacts, menu); } @override public boolean onoptionsitemselected(menuitem item) { activity activity = getactivity(); intent addcontact = new intent(activity,addeditcontacts.class); startactivity(addcontact); return super.onoptionsitemselected(item); } }
error
07-17 22:01:33.959: e/androidruntime(10924): java.lang.nullpointerexception 07-17 22:01:33.959: e/androidruntime(10924): @ com.ektroid.graphico.mycontactsactivity$getcontacts.onpostexecute(mycontactsactivity.java:95) 07-17 22:01:33.959: e/androidruntime(10924): @ com.ektroid.graphico.mycontactsactivity$getcontacts.onpostexecute(mycontactsactivity.java:1) 07-17 22:01:33.959: e/androidruntime(10924): @ android.os.asynctask.finish(asynctask.java:602) 07-17 22:01:33.959: e/androidruntime(10924): @ android.os.asynctask.access$600(asynctask.java:156) 07-17 22:01:33.959: e/androidruntime(10924): @ android.os.asynctask$internalhandler.handlemessage(asynctask.java:615) 07-17 22:01:33.959: e/androidruntime(10924): @ android.os.handler.dispatchmessage(handler.java:99) 07-17 22:01:33.959: e/androidruntime(10924): @ android.os.looper.loop(looper.java:137) 07-17 22:01:33.959: e/androidruntime(10924): @ android.app.activitythread.main(activitythread.java:4424) 07-17 22:01:33.959: e/androidruntime(10924): @ java.lang.reflect.method.invokenative(native method) 07-17 22:01:33.959: e/androidruntime(10924): @ java.lang.reflect.method.invoke(method.java:511) 07-17 22:01:33.959: e/androidruntime(10924): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:784) 07-17 22:01:33.959: e/androidruntime(10924): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:551) 07-17 22:01:33.959: e/androidruntime(10924): @ dalvik.system.nativestart.main(native method) 07-17 22:01:34.569: i/dalvikvm(10924): threadid=3: reacting signal 3 07-17 22:01:34.569: i/dalvikvm(10924): wrote stack traces '/data/anr/traces.txt' 07-17 22:01:35.859: i/process(10924): sending signal. pid: 10924 sig: 9
inside onpostexecute use following condition
if( (!isremoving()) && (isresumed()) && cursor!=null )
Comments
Post a Comment