android - Updating fragment text view from Activity - Nullpointerexception -


being sort of new in android topic, i've been reading , taking courses/tutorials here , there. understand activity deal i'm fragments , trying put simple app using google calendar api. however, i'm having hard time grasping "updating fragment" mainactivity part.

at point, app crashes i've tried make work have had no success :( how go this??

here's mainactivity:

public class mainactivity extends activity     implements navigationdrawerfragment.navigationdrawercallbacks {  com.google.api.services.calendar.calendar mservice;  googleaccountcredential credential; public textview mstatustext; public textview meventtext;  final httptransport transport = androidhttp.newcompatibletransport(); final jsonfactory jsonfactory = gsonfactory.getdefaultinstance();   static final int request_account_picker = 1000; static final int request_authorization = 1001; static final int request_google_play_services = 1002; private static final string pref_account_name = "accountname"; private static final string[] scopes = {calendarscopes.calendar_readonly};  /**  * fragment managing behaviors, interactions , presentation of navigation drawer.  */ private navigationdrawerfragment mnavigationdrawerfragment;  /**  * used store last screen title. use in {@link #restoreactionbar()}.  */ private charsequence mtitle;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      mnavigationdrawerfragment = (navigationdrawerfragment)             getfragmentmanager().findfragmentbyid(r.id.navigation_drawer);     mtitle = gettitle();      // set drawer.     mnavigationdrawerfragment.setup(             r.id.navigation_drawer,             (drawerlayout) findviewbyid(r.id.drawer_layout));      // initialize credentials , calendar service.     sharedpreferences settings = getpreferences(context.mode_private);     credential = googleaccountcredential.usingoauth2(             getapplicationcontext(), arrays.aslist(scopes))             .setbackoff(new exponentialbackoff())             .setselectedaccountname(settings.getstring(pref_account_name, null));      mservice = new com.google.api.services.calendar.calendar.builder(             transport, jsonfactory, credential)             .setapplicationname("calendar api android quickstart")             .build();   }  @override public void onnavigationdraweritemselected(int position) {      fragment fragment = null;      switch (position) {         case 0:            fragment = new noticias_fragment();             break;         case 1:             fragment = new eventos_fragment();              break;         case 2:            fragment = new quienes_fragment();             break;         case 3:             fragment = new contacto_fragment();             break;     }     // update main content replacing fragments     fragmentmanager fragmentmanager = getfragmentmanager();     fragmentmanager.begintransaction()             .replace(r.id.container, fragment)             .commit(); }   public void onsectionattached(int number) {     switch (number) {         case 1:             mtitle = getstring(r.string.title_section1);             break;         case 2:             mtitle = getstring(r.string.title_section2);             break;         case 3:             mtitle = getstring(r.string.title_section3);             break;         case 4:             mtitle = getstring(r.string.title_section4);             break;      } }  public void restoreactionbar() {     actionbar actionbar = getactionbar();     actionbar.setnavigationmode(actionbar.navigation_mode_standard);     actionbar.setdisplayshowtitleenabled(true);     actionbar.settitle(mtitle); }   @override public boolean oncreateoptionsmenu(menu menu) {     if (!mnavigationdrawerfragment.isdraweropen()) {         // show items in action bar relevant screen         // if drawer not showing. otherwise, let drawer         // decide show in action bar.         getmenuinflater().inflate(r.menu.main, menu);         restoreactionbar();         return true;     }     return super.oncreateoptionsmenu(menu); }  @override public boolean onoptionsitemselected(menuitem item) {     // handle action bar item clicks here. action bar     // automatically handle clicks on home/up button, long     // specify parent activity in androidmanifest.xml.     int id = item.getitemid();     if (id == r.id.action_settings) {         return true;     }     return super.onoptionsitemselected(item); }  /**  * placeholder fragment containing simple view.  */ public static class placeholderfragment extends fragment {     /**      * fragment argument representing section number      * fragment.      */     private static final string arg_section_number = "section_number";      /**      * returns new instance of fragment given section      * number.      */     public static placeholderfragment newinstance(int sectionnumber) {         placeholderfragment fragment = new placeholderfragment();         bundle args = new bundle();         args.putint(arg_section_number, sectionnumber);         fragment.setarguments(args);         return fragment;     }      public placeholderfragment() {     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         view rootview = inflater.inflate(r.layout.fragment_main, container, false);         return rootview;     }      @override     public void onattach(activity activity) {         super.onattach(activity);         ((mainactivity) activity).onsectionattached(                 getarguments().getint(arg_section_number));     } }   public void buttononclick(view v) {     switch (v.getid()) {         case r.id.imagebutton: //botón mail             intent emailintent = new intent(android.content.intent.action_send);             emailintent.settype("text/plain");             emailintent.putextra(android.content.intent.extra_email, new string[]{"elmaildefresh@gmail.com"});             emailintent.putextra(android.content.intent.extra_subject, "motivo");             emailintent.putextra(android.content.intent.extra_text, "escribe tu texto enviar");             startactivity(intent.createchooser(emailintent, "elije tu gestor de correo..."));             break;         case r.id.imagebutton2: //botón página             intent intent2 = new intent(intent.action_view);             intent2.setdata(uri.parse("http://www.lapaginadelfreshxalapa.com"));             startactivity(intent2);             break;         case r.id.imagebutton3: //botón fb             intent intent3 = new intent(intent.action_view);             intent3.setdata(uri.parse("http://www.facebook.com/freshxalapa"));             startactivity(intent3);             break;         case r.id.imagebutton4: //botón tw             intent intent4 = new intent(intent.action_view);             intent4.setdata(uri.parse("http://www.twitter.com/freshxalapa"));             startactivity(intent4);             break;      } }  /**  * called whenever activity pushed foreground, such after  * call oncreate().  */  @override protected void onresume() {     super.onresume();     if (isgoogleplayservicesavailable()) {         refresheventlist();     } else {          mstatustext.settext("google play services required: " +                 "after installing, close , relaunch app.");     } }  /**  * called when activity launched here (specifically, accountpicker  * , authorization) exits, giving requestcode started with,  * resultcode returned, , additional data it.  * @param requestcode code indicating activity result incoming.  * @param resultcode code indicating result of incoming  *     activity result.  * @param data intent (containing result data) returned incoming  *     activity result.  */ @override protected void onactivityresult(         int requestcode, int resultcode, intent data) {     super.onactivityresult(requestcode, resultcode, data);     switch(requestcode) {         case request_google_play_services:             if (resultcode == result_ok) {                 refresheventlist();             } else {                 isgoogleplayservicesavailable();             }             break;         case request_account_picker:             if (resultcode == result_ok && data != null &&                     data.getextras() != null) {                 string accountname =                         data.getstringextra(accountmanager.key_account_name);                 if (accountname != null) {                     credential.setselectedaccountname(accountname);                     sharedpreferences settings =                             getpreferences(context.mode_private);                     sharedpreferences.editor editor = settings.edit();                     editor.putstring(pref_account_name, accountname);                     editor.commit();                     refresheventlist();                 }             } else if (resultcode == result_canceled) {                 mstatustext.settext("account unspecified.");             }             break;         case request_authorization:             if (resultcode == result_ok) {                 refresheventlist();             } else {                 chooseaccount();             }             break;     }      super.onactivityresult(requestcode, resultcode, data); }  /**  * attempt list of calendar events display. if email  * address isn't known yet, call chooseaccount() method user  * can pick account.  */ private void refresheventlist() {     if (credential.getselectedaccountname() == null) {         chooseaccount();     } else {         if (isdeviceonline()) {             new eventsfetchtask(this).execute();         } else {             mstatustext.settext("no network connection available.");         }     } }  /**  * clear existing events list display , update header  * message; called background threads , async tasks need  * update ui (in ui thread).  */ public void clearevents() {     runonuithread(new runnable() {         @override         public void run() {             mstatustext.settext("retrieving events…");             meventtext.settext("");         }     }); }  /**  * fill event display given list of strings; called  * background threads , async tasks need update ui (in  * ui thread).  * @param eventstrings list of strings populate event display with.  */ public void updateeventlist(final list<string> eventstrings) {     runonuithread(new runnable() {         @override         public void run() {             if (eventstrings == null) {                 mstatustext.settext("error retrieving events!");             } else if (eventstrings.size() == 0) {                 mstatustext.settext("no upcoming events found.");             } else {                 mstatustext.settext("your upcoming events retrieved using" +                         " google calendar api:");                 meventtext.settext(textutils.join("\n\n", eventstrings));             }         }     }); }  /**  * show status message in list header textview; called background  * threads , async tasks need update ui (in ui thread).  * @param message string display in ui header textview.  */ public void updatestatus(final string message) {     runonuithread(new runnable() {         @override         public void run() {             mstatustext.settext(message);         }     }); }  /**  * starts activity in google play services user can pick  * account.  */ private void chooseaccount() {     startactivityforresult(             credential.newchooseaccountintent(), request_account_picker); }  /**  * checks whether device has network connection.  * @return true if device has network connection, false otherwise.  */ private boolean isdeviceonline() {     connectivitymanager connmgr =             (connectivitymanager) getsystemservice(context.connectivity_service);     networkinfo networkinfo = connmgr.getactivenetworkinfo();     return (networkinfo != null && networkinfo.isconnected()); }  /**  * check google play services apk installed , date.  * launch error dialog user update google play services if  * possible.  * @return true if google play services available ,  *     date on device; false otherwise.  */ private boolean isgoogleplayservicesavailable() {     final int connectionstatuscode =             googleplayservicesutil.isgoogleplayservicesavailable(this);     if (googleplayservicesutil.isuserrecoverableerror(connectionstatuscode)) {         showgoogleplayservicesavailabilityerrordialog(connectionstatuscode);         return false;     } else if (connectionstatuscode != connectionresult.success ) {         return false;     }     return true; }  /**  * display error dialog showing google play services missing  * or out of date.  * @param connectionstatuscode code describing presence (or lack of)  *     google play services on device.  */ void showgoogleplayservicesavailabilityerrordialog(         final int connectionstatuscode) {     runonuithread(new runnable() {         @override         public void run() {             dialog dialog = googleplayservicesutil.geterrordialog(                     connectionstatuscode,                     mainactivity.this,                     request_google_play_services);             dialog.show();         }     }); } } 

and here's fragment:

import android.app.fragment; import android.os.bundle; import android.support.annotation.nullable; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.textview;  public class eventos_fragment extends fragment { view rootview;  /**  * calendar service object used query or modify calendars via  * calendar api. note: not confuse class  * com.google.api.services.calendar.model.calendar class.  */    textview mstatustext;  textview meventtext;    @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {       rootview = inflater.inflate(r.layout.fragment_evento, container, false);     //set event text views google api      return rootview; }  public void changestatustext(){     //this textview should bound in fragment oncreate member variable     mstatustext = (textview) rootview.findviewbyid(r.id.status_text_view);     mstatustext.settext("estatus"); }  public void changeeventtext(){     //this textview should bound in fragment oncreate member variable     meventtext = (textview) rootview.findviewbyid(r.id.event_text_view);     meventtext.settext("evento"); }  } 

the log:

04-28 18:38:46.751    1557-1557/mx.com.origamilab.fresh e/androidruntime﹕ fatal exception: main     process: mx.com.origamilab.fresh, pid: 1557     java.lang.runtimeexception: unable resume activity {mx.com.origamilab.fresh/mx.com.origamilab.fresh.mainactivity}: java.lang.nullpointerexception             @ android.app.activitythread.performresumeactivity(activitythread.java:2774)             @ android.app.activitythread.handleresumeactivity(activitythread.java:2803)             @ android.app.activitythread.handlelaunchactivity(activitythread.java:2238)             @ android.app.activitythread.access$800(activitythread.java:135)             @ android.app.activitythread$h.handlemessage(activitythread.java:1196)             @ android.os.handler.dispatchmessage(handler.java:102)             @ android.os.looper.loop(looper.java:136)             @ android.app.activitythread.main(activitythread.java:5001)             @ java.lang.reflect.method.invokenative(native method)             @ java.lang.reflect.method.invoke(method.java:515)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:785)             @ com.android.internal.os.zygoteinit.main(zygoteinit.java:601)             @ dalvik.system.nativestart.main(native method)      caused by: java.lang.nullpointerexception             @ mx.com.origamilab.fresh.mainactivity.onresume(mainactivity.java:258)             @ android.app.instrumentation.callactivityonresume(instrumentation.java:1192)             @ android.app.activity.performresume(activity.java:5310)             @ android.app.activitythread.performresumeactivity(activitythread.java:2764)             at android.app.activitythread.handleresumeactivity(activitythread.java:2803)             at android.app.activitythread.handlelaunchactivity(activitythread.java:2238)             at android.app.activitythread.access$800(activitythread.java:135)             at android.app.activitythread$h.handlemessage(activitythread.java:1196)             at android.os.handler.dispatchmessage(handler.java:102)             at android.os.looper.loop(looper.java:136)             at android.app.activitythread.main(activitythread.java:5001)             at java.lang.reflect.method.invokenative(native method)             at java.lang.reflect.method.invoke(method.java:515)             at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:785)             at com.android.internal.os.zygoteinit.main(zygoteinit.java:601)             at dalvik.system.nativestart.main(native method) 

try this

replace

fragmentmanager fragmentmanager = getfragmentmanager(); fragmentmanager.begintransaction()         .replace(r.id.container, fragment)         .commit(); 

with

android.support.v4.app.fragmentmanager fragmentmanager = getsupportfragmentmanager();             fragmentmanager.begintransaction()                     .replace(r.id.container, fragment).commit(); 

Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -