Aşağıdakileri kodumda gösterildiği gibi alabiliyorum, ancak kullanıcı profilinden e-posta alamıyorum.Facebook onCompleted Email java.lang.NullPointerException
Bunun için ne yapabilirim?
Her türlü yardım memnuniyetle karşılanacaktır.
başlarında
Ben Facebook kullanıcısı ayrıntılarını almak için bu kaynağı kullanarak ve herhangi bir sorun olmadan (Email dahil) verileri getirme edildi:public class MainActivity extends Activity {
private Session.StatusCallback sessionStatusCallback;
private Session currentSession;
private Button login;
private Button logout;
private Button publishButton;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
// create instace for sessionStatusCallback
sessionStatusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
onSessionStateChange(session, state, exception);
}
};
login = (Button) findViewById(R.id.loginButton);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
connectToFB();
}
});
logout = (Button) findViewById(R.id.logoutButton);
logout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (currentSession != null) {
currentSession.closeAndClearTokenInformation();
...
}
}
});
// publish button
publishButton = (Button) findViewById(R.id.publishButton);
publishButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
publishStory();
}
});
}
public void connectToFB() {
List<String> permissions = new ArrayList<String>();
permissions.add("publish_actions");
currentSession = new Session.Builder(this).build();
currentSession.addCallback(sessionStatusCallback);
Session.OpenRequest openRequest = new Session.OpenRequest(
MainActivity.this);
openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
openRequest.setRequestCode(Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE);
openRequest.setPermissions(permissions);
currentSession.openForPublish(openRequest);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (currentSession != null) {
currentSession
.onActivityResult(this, requestCode, resultCode, data);
}
}
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (session != currentSession) {
return;
}
if (state.isOpened()) {
// Log in just happened.
Toast.makeText(getApplicationContext(), "session opened",
Toast.LENGTH_SHORT).show();
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
String fbId = user.getId();
String fbName = user.getName();
String gender = user.asMap().get("gender").toString();
String email = user.asMap().get("email").toString();
String first = user.asMap().get("first_name").toString();
String last = user.asMap().get("last_name").toString();
textView.setText("Id: " + fbId + ", Name: " + fbName + ", Gender: " + gender + ", EmailID: " + email + ", First: " + first + ", Last: " + last);
}
});
} else if (state.isClosed()) {
// Log out just happened. Update the UI.
Toast.makeText(getApplicationContext(), "session closed",
Toast.LENGTH_SHORT).show();
}
}
public void publishStory() {
....
}
}
Ve şimdi Projemin birinde aynı kodu kullanıyorum, ama her zaman alma:
String email = user.asMap().get("email").toString();
01: Bu hatta
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at c.o.m.MainActivity$5.onCompleted(MainActivity.java:262)
at com.facebook.Request$1.onCompleted(Request.java:303)
at com.facebook.Request$4.run(Request.java:1726)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
, ben NPE alıyorum
Kodu:
public class MainActivity extends Activity {
Button btnFBLogin, btnGPLogin;
private Session.StatusCallback sessionStatusCallback;
private Session currentSession;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen_layout);
sessionStatusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
onSessionStateChange(session, state, exception);
}
};
btnFBLogin = (Button) findViewById(R.id.loginFB);
btnFBLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
connectToFB();
}
});
}
public void connectToFB() {
List<String> permissions = new ArrayList<String>();
permissions.add("publish_actions");
currentSession = new Session.Builder(this).build();
currentSession.addCallback(sessionStatusCallback);
Session.OpenRequest openRequest = new Session.OpenRequest(
MainActivity.this);
openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
openRequest.setRequestCode(Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE);
openRequest.setPermissions(permissions);
currentSession.openForPublish(openRequest);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (currentSession != null) {
currentSession
.onActivityResult(this, requestCode, resultCode, data);
}
}
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (session != currentSession) {
return;
}
if (state.isOpened()) {
// Log in just happened.
Toast.makeText(getApplicationContext(), "session opened",
Toast.LENGTH_SHORT).show();
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
String fbId = user.getId();
String fbName = user.getName();
String gender = user.asMap().get("gender").toString();
String email = user.asMap().get("email").toString();
String first = user.asMap().get("first_name").toString();
String last = user.asMap().get("last_name").toString();
Toast.makeText(MainActivity.this, "EmailId:- "+email, Toast.LENGTH_LONG).show();
}
});
} else if (state.isClosed()) {
// Log out just happened. Update the UI.
Toast.makeText(getApplicationContext(), "session closed",
Toast.LENGTH_SHORT).show();
}
}
}
Bunun nedeni ne olabilir? Neden böyle oluyor?
Ne kadar kötüsü .. sorun ne? – Sun
Log.i ("fb", "fb user:" + user.toString()); Bunu neden yapıyorsun ? oturum var mı? –
@Sun: Muhtemelen 'toString()' 'null' üzerinde çağırarak' 'string e-postayı = user.asMap() 'ı kullanmayı deneyin. Get (" email ")' –