android - NULL POINTER EXCEPTION in the Widget provider class at first launch of Widget -


hi , having trouble null pointer exception.i error when place widget in home screen first time.every other time widget works perfectly. widget has configuration activity. activity not launch,instead onreceive in widget provider called , troughs null pointer exception. can 1 provide solution problem?

i attaching code configure activity , widget provider class.

the widget configure class:

public class singlenoteconfigure extends listactivity  {   private notesdbadapter mdbhelper; int mappwidgetid = appwidgetmanager.invalid_appwidget_id; public static string action_widget_list = "actionreceiverlist"; public static string action_widget_new = "actionreceivernew";    @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      //set result canceled allow user     //to change mind mid widget configure     setresult(result_canceled);     log.d("mytag", "in oncreate of of widget configure");      //set layout file widget configure     setcontentview(r.layout.notes_list_config);      //using action bar title user instruction     settitle("select note display on wodget");      // find widget id intent.      intent intent = getintent();     bundle extras = intent.getextras();     if (extras != null) {         mappwidgetid = extras.getint(                 appwidgetmanager.extra_appwidget_id, appwidgetmanager.invalid_appwidget_id);     }     log.d("mytag", "in oncreate");     //stuff database open     mdbhelper = new notesdbadapter(this);     mdbhelper.open();      //call method fills list view     filldata();  }   @override     protected void onlistitemclick(listview l, view v, int position, long id) {         super.onlistitemclick(l, v, position, id);          cursor note = mdbhelper.fetchnote(id);         startmanagingcursor(note);         string title = note.getstring(note.getcolumnindexorthrow(notesdbadapter.key_title));         string text = note.getstring(note.getcolumnindexorthrow(notesdbadapter.key_body));            remoteviews views = new remoteviews(this.getpackagename(), r.layout.singlenote_widget);         appwidgetmanager appwidgetmanager = appwidgetmanager.getinstance(this);          appwidgetmanager.updateappwidget(mappwidgetid, views);                log.d("mytag", "in onlistitemclick....");          loaddata(title, text, id);//here id row id of selection;it returned onlistitemselect           intent resultvalue = new intent();         resultvalue.putextra(appwidgetmanager.extra_appwidget_id, mappwidgetid);                     setresult(result_ok,resultvalue);            finish();  }     void loaddata(string title, string text, long id) {      appwidgetmanager appwidgetmanager = appwidgetmanager.getinstance(this);      log.d("mytag", "in load data....");     singlenote.updatewidget(this, appwidgetmanager, mappwidgetid, title, text);     notesdbadapter.updatewidgetid(mappwidgetid,id);  }  private void filldata() {     cursor notescursor = mdbhelper.fetchallnotes();     startmanagingcursor(notescursor);     log.d("mytag", "in fill data  of widget configure");     // create array specify fields want display in list (title , date)     string[] = new string[]{notesdbadapter.key_title,notesdbadapter.key_date};       // , array of fields want bind fields (title , date)     int[] = new int[]{r.id.title,r.id.date};       // create simple cursor adapter , set display     simplecursoradapter notes = new simplecursoradapter(this, r.layout.notes_row1, notescursor, from, to);      setlistadapter(notes);   }   } 

the widget provide class:

public class singlenote extends appwidgetprovider {  public static string update_action = "actionupdatesinglenotewidget";  private static notesdbadapter mdbhelper;    public void onupdate(context context, appwidgetmanager appwidgetmanager, int[] appwidgetids) {     final int n = appwidgetids.length;      // perform loop procedure each app widget belongs provider     (int i=0; i<n; i++) {         int appwidgetid = appwidgetids[i];                      log.d("mytag", "in onupdate");          intent intent = new intent(context, notepadv3.class);         pendingintent pendingintent = pendingintent.getactivity(context, 0, intent, 0);         remoteviews views = new remoteviews(context.getpackagename(), r.layout.singlenote_widget);         views.setonclickpendingintent(r.id.single_note_text, pendingintent);            // push update widget home screen          componentname thiswidget = new componentname(context, singlenote.class);         appwidgetmanager manager = appwidgetmanager.getinstance(context);         manager.updateappwidget(thiswidget, views);      } }  @override  public void onreceive(context context, intent intent) {      log.d("mytag", "in onreceive....");         string action = intent.getaction();          log.d("mytag", "in onreceive....line 2");         bundle extras = intent.getextras();          log.d("mytag", "in onreceive....after bundle");//this gets in log          string title = extras.getstring("title");         log.d("mytag", "in onreceive....after title");//non of other log entry's                                                           // make in          string text = extras.getstring("body");         log.d("mytag", "in onreceive....after text");         log.d("mytag", "@ point of int");         int id = extras.getint("widget_id");          log.d("mytag", action+ title + text + id);          if (action != null && action.equals(update_action)) {              final appwidgetmanager appwidgetmanager = appwidgetmanager.getinstance(context);               if (id > 0)             {                 updatewidget(context, appwidgetmanager, id ,title ,text);             }             else {                 return;              }     }       else {              super.onreceive(context, intent);      }    }  static void updatewidget(context context, appwidgetmanager appwidgetmanager, int appwidgetid, string title, string text){      log.d("mytag", "in updatewidget method in siglenote widget....");     remoteviews views = new remoteviews(context.getpackagename(), r.layout.singlenote_widget);     views.settextviewtext(r.id.single_note_title, title);     views.settextviewtext(r.id.single_note_text, text);     appwidgetmanager.updateappwidget(appwidgetid, views);    } } 

as can see have log entries on place , have commented @ point log entries end.

this method in 1 of activities , , call update widget required. have "if(!null)" @ end of method don't null pointer exception , doesn't seem helping

private void updatewidget() {      cursor note = mdbhelper.fetchwidgetid(mrowid);     startmanagingcursor(note);     log.d("mytag", "in updatewidget method in edit note");     int id = note.getint(note.getcolumnindexorthrow(notesdbadapter.key_widget_id));//here id widget id out of database     intent = new intent(this, singlenote.class);      i.setaction(singlenote.update_action);      i.putextra("title", mtitletext.gettext().tostring());     i.putextra("body", mbodytext.gettext().tostring());     i.putextra("widget_id",id);     string title = mtitletext.gettext().tostring();     //string body =  mbodytext.gettext().tostring();     if(title != null){      sendbroadcast(i);      } 

edit stack trace:

    07-12 04:08:36.473: e/stacktrace_tag(2615): stacktrace     07-12 04:08:36.483: e/stacktrace_tag(2615): java.lang.nullpointerexception     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ drkstr.yan.singlenote.onreceive(singlenote.java:58)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ android.app.activitythread.handlereceiver(activitythread.java:1994)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ android.app.activitythread.access$2400(activitythread.java:132)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ android.app.activitythread$h.handlemessage(activitythread.java:1093)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ android.os.handler.dispatchmessage(handler.java:99)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ android.os.looper.loop(looper.java:143)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ android.app.activitythread.main(activitythread.java:4196)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ java.lang.reflect.method.invokenative(native method)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ java.lang.reflect.method.invoke(method.java:507)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:839)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:597)     07-12 04:08:36.483: e/stacktrace_tag(2615):     @ dalvik.system.nativestart.main(native method)     07-12 04:08:45.483: e/stacktrace_tag(2615): stacktrace     07-12 04:08:45.483: e/stacktrace_tag(2615): java.lang.nullpointerexception     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ drkstr.yan.singlenote.onreceive(singlenote.java:58)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ android.app.activitythread.handlereceiver(activitythread.java:1994)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ android.app.activitythread.access$2400(activitythread.java:132)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ android.app.activitythread$h.handlemessage(activitythread.java:1093)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ android.os.handler.dispatchmessage(handler.java:99)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ android.os.looper.loop(looper.java:143)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ android.app.activitythread.main(activitythread.java:4196)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ java.lang.reflect.method.invokenative(native method)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ java.lang.reflect.method.invoke(method.java:507)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:839)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:597)     07-12 04:08:45.483: e/stacktrace_tag(2615):     @ dalvik.system.nativestart.main(native method) 

here main questions : 1. why happen when placing widget first time after fresh install of application ? 2. why onrecieve called before widget configure ? 3. , how solve it.

thanks taking time read , can give.

the main thing should notice have nullpointerexception @ singlenote.java:58.

judging comments statements show in log, i'd guess extras null, means there no extras in intent. makes sense if happens first time. null-check extras before using it.


Comments