java - onSessionStateChange does whatever it wants -


i know title may odd, since i've changed app's lifecycle moving login cycle mainactivity loginactivity, facebook's onsessionstatechange absolutely nothing of ask him.

the login's lifecycle, using facebook, logs user facebook, gets uid fb, , retrieve infos our app's server using uid, , starts next activity. i've changed app's lifecycle, starts next activity without getting uid.

so here code onsessionstatechange in loginactivity :

private void onsessionstatechange(session session, sessionstate sessionstate, exception exception){     //make change if activity visible     if(isresumed){         log.i("facebook", "fb state changed");         fragmentmanager fragmentmanager = getsupportfragmentmanager();          //clear stack         for(int = 0; < fragmentmanager.getbackstackentrycount(); i++){             fragmentmanager.popbackstack();         }          if(sessionstate.isopened()){             log.i("facebook", "fb session opened");             //if facebook session opened, display default behavior , add uid             //to shared preferences              //now let's update shared preferences uid.             final session requestsession = session;             request request = request.newmerequest(session, new request.graphusercallback(){                 @override                 public void oncompleted(graphuser user, response response){                     if(requestsession == session.getactivesession() && user != null){                         log.i("facebook", "request uid " + user.getid());                         getuserbyuidtask usertask = new getuserbyuidtask(getparent());                         usertask.execute(new user(user.getid()));                          //get , update current user database                         try{                             mainactivity.scurrentuser = usertask.get();                             log.i("facebook", mainactivity.scurrentuser.firstname                                     + "'s uid " + mainactivity.scurrentuser.uid);                             updatecurrentusersettings();                          }catch (interruptedexception e){                             //todo: handle , display error                             log.e("facebook", "error getting user uid");                             return;                         }catch (executionexception e){                             //todo: handle , display error                             log.e("facebook", "error getting user uid");                             return;                         }                          log.d("facebook", "displaying main activity");                         //startactivity(new intent(getparent(), mainactivity.class));                     }else{                         log.e("facebook", "error when making newmerequest");                     }                 }             });              request.executeasync();         }else if(sessionstate.isclosed()){             log.i("myapp", "closing session");              //remove current uid prevent unauthorized authentication , gcm bind             getsharedpreferences(userprefsfile,0).edit().clear().commit();;             try {                 googlecloudmessaging.getinstance(this).unregister();             } catch (ioexception e) {                 //todo: handle                 e.printstacktrace();             }          }     } } 

as can see, should lot of log output, telling me session being opened, , mainactivity should not started (since commented testing purposes). absolutely no log output, , mainactivity still gets launched, though i've commented it. , when activity started, current user not updated or created, leading classic crash.

also may need other loginactivity's facebook related methods :

private boolean isresumed = false; private uilifecyclehelper uihelper; private session.statuscallback sessionstatuscallback = new session.statuscallback(){     @override     public void call(session session, sessionstate state, exception exception){         onsessionstatechange(session, state, exception);     } };  @override public void oncreate(bundle savedinstancestate){     super.oncreate(savedinstancestate);      //bind fb session callback listener ui helper , call lifecycle method     uihelper = new uilifecyclehelper(this, sessionstatuscallback);     uihelper.oncreate(savedinstancestate);      setcontentview(r.layout.activity_login);      registerchoicesfragment registerfragment = new registerchoicesfragment();     getsupportfragmentmanager().begintransaction().replace(r.id.login_container,             registerfragment).commit(); }//end oncreate    @override public void onresume(){     super.onresume();     uihelper.onresume();     isresumed = true; }  @override public void onpause(){     super.onpause();     uihelper.onpause();     isresumed = false; }  @override public void onactivityresult(int requestcode, int resultcode, intent data){     super.onactivityresult(requestcode, resultcode, data);     uihelper.onactivityresult(requestcode, resultcode, data); }  @override public void ondestroy(){     super.ondestroy();     uihelper.ondestroy(); }  @override public void onsaveinstancestate(bundle outstate){     super.onsaveinstancestate(outstate);     uihelper.onsaveinstancestate(outstate); }  @override protected void onresumefragments(){     super.onresumefragments();     session session = session.getactivesession();      if(session != null && session.isopened()){         //if current facebook session exists , opened, make sure autheticated         //ui selected         startactivity(new intent(this, lovrmain.class));     } } 

so here is, have absolutely no idea of makes facebook api behave it wants, , i've come point realize hate coding facebook as hate coding ie.


Comments

Popular posts from this blog

html - How to style widget with post count different than without post count -

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

javascript - storing input from prompt in array and displaying the array -