i learned facebook sdk on android. search on stackoverflow , facebook developer guide login, still stuck when profile data facebook sdk. try implement solution : unable profile , get email, still stuck.
there code :
public class homeloginactivity extends activity { loginbutton btnfacebook; callbackmanager callbackmanager = callbackmanager.factory.create(); profiletracker proftrack; accesstokentracker accesstokentracker; textview welcometext; facebookcallback<loginresult> mfacebookcallback; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); facebooksdk.sdkinitialize(this.getapplicationcontext()); setcontentview(r.layout.activity_home_login); welcometext = (textview) findviewbyid(r.id.welcome_id); accesstokentracker = new accesstokentracker() { @override protected void oncurrentaccesstokenchanged( accesstoken oldaccesstoken, accesstoken currentaccesstoken) { // app code log.d("current token", "" + currentaccesstoken); //} } }; proftrack = new profiletracker() { @override protected void oncurrentprofilechanged( profile oldprofile, profile currentprofile) { // app code log.d("current profile", "" + currentprofile); welcometext.settext(constructwelcomemessage(currentprofile)); } }; mfacebookcallback = new facebookcallback<loginresult>() { @override public void onsuccess(loginresult loginresult) { accesstoken accesstoken = loginresult.getaccesstoken(); profile profile = profile.getcurrentprofile(); welcometext.settext(constructwelcomemessage(profile)); graphrequest request = graphrequest.newmerequest( loginresult.getaccesstoken(), new graphrequest.graphjsonobjectcallback() { @override public void oncompleted( jsonobject object, graphresponse response) { // application code try { string id=object.getstring("id"); string name=object.getstring("name"); string email=object.getstring("email"); string gender=object.getstring("gender"); stringbirthday=object.getstring("birthday"); //do data here } catch (jsonexception e) { e.printstacktrace(); } } }); bundle parameters = new bundle(); parameters.putstring("fields", "id,name,email,gender,birthday"); request.setparameters(parameters); request.executeasync(); } @override public void oncancel() { } @override public void onerror(facebookexception e) { } }; accesstokentracker.starttracking(); proftrack.starttracking(); //button facebook btnfacebook = (loginbutton) findviewbyid(r.id.btnfacebook); btnfacebook.setreadpermissions("public_profile", "user_friends"); btnfacebook.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { loginmanager.getinstance().loginwithreadpermissions((activity) v.getcontext(),arrays.aslist("public_profile", "user_friends")); } }); btnfacebook.registercallback(callbackmanager, mfacebookcallback); } // ennd on create private string constructwelcomemessage(profile profile) { stringbuffer stringbuffer = new stringbuffer(); if (profile != null) { stringbuffer.append("welcome " + profile.getname()); } else { stringbuffer.append("null profile"); } return stringbuffer.tostring(); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); callbackmanager.onactivityresult(requestcode, resultcode, data); } @override public void onresume() { super.onresume(); accesstoken.getcurrentaccesstoken(); log.d("resume current token", "" + accesstoken.getcurrentaccesstoken()); profile.fetchprofileforcurrentaccesstoken(); } @override public void onstop() { super.onstop(); proftrack.stoptracking(); accesstokentracker.stoptracking(); } @override public void ondestroy() { super.ondestroy(); accesstokentracker.stoptracking(); proftrack.stoptracking(); } }
and there log cat :
java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string org.json.jsonobject.getstring(java.lang.string)' on null object reference @ com.twiscode.gimme.homeloginactivity$3$1.oncompleted(homeloginactivity.java:100) @ com.facebook.graphrequest$1.oncompleted(graphrequest.java:298) @ com.facebook.graphrequest$5.run(graphrequest.java:1246) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5221) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:899) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:694)
try sample code profile info
loginbutton.registercallback(callbackmanager, new facebookcallback<loginresult>() { @override public void onsuccess(loginresult loginresult) { // app code // login ok access token graphrequest request = graphrequest.newmerequest( accesstoken.getcurrentaccesstoken(), new graphrequest.graphjsonobjectcallback() { @override public void oncompleted(jsonobject object, graphresponse response) { if (buildconfig.debug) { facebooksdk.setisdebugenabled(true); facebooksdk .addloggingbehavior(loggingbehavior.include_access_tokens); system.out .println("accesstoken.getcurrentaccesstoken()" + accesstoken .getcurrentaccesstoken() .tostring()); profile.getcurrentprofile().getid(); profile.getcurrentprofile().getfirstname(); profile.getcurrentprofile().getlastname(); profile.getcurrentprofile().getprofilepictureuri(50, 50); //string email=usermanager.asmap().get(“email”).tostring(); } } }); request.executeasync(); /* bundle parameters = new bundle(); parameters .putstring("fields", "id,firstname,lastname,name,email,gender,birthday,address"); request.setparameters(parameters); intent loginintent = new intent(getactivity(), editprofile.class); startactivity(loginintent); system.out.println("xxxx " + getid()); */ makejsonobjreq(); } @override public void oncancel() { // app code } @override public void onerror(facebookexception exception) { // app code } }); return view;