带有电话号码的Android facebook登录返回空用户名
我使用的是Facebook登录代码,它在尝试使用电子邮件登录时运行良好。 我现在正试图用电话号码登录带有电话号码的Android facebook登录返回空用户名,android,facebook,login,Android,Facebook,Login,我使用的是Facebook登录代码,它在尝试使用电子邮件登录时运行良好。 我现在正试图用电话号码登录 private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { progressDialog.dismiss(
private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
progressDialog.dismiss();
// App code
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
Log.e("response: ", response + "");
Log.e("object: ", object + "");
try {
user = new User();
user.facebookID = object.getString("id").toString();
user.email = object.getString("email").toString();
user.name = object.getString("name").toString();
user.gender = object.getString("gender").toString();
PrefUtils.setCurrentUser(user,LoginActivity.this);
}catch (Exception e){
e.printStackTrace();
}
Toast.makeText(LoginActivity.this,"welcome "+user.name,Toast.LENGTH_LONG).show();
System.out.println("UserID: "+user.facebookID+" Name: "+user.name);
Intent intent=new Intent(LoginActivity.this,LogoutActivity.class);
startActivity(intent);
finish();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender, birthday");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
progressDialog.dismiss();
}
@Override
public void onError(FacebookException e) {
progressDialog.dismiss();
}
};
我知道例外是因为没有电子邮件。
但为什么在吐司中它给出(欢迎空)
输出中的名称返回Null
提示:当通过其他帐户通过电子邮件登录时,它通常会给出我的名字 这是因为代码执行风格:Java逐行执行代码: 因此,在您的代码中:
try {
user = new User();
user.facebookID = object.getString("id").toString();
user.email = object.getString("email").toString();
user.name = object.getString("name").toString();
user.gender = object.getString("gender").toString();
PrefUtils.setCurrentUser(user,LoginActivity.this);
}catch (Exception e){
e.printStackTrace();
}
它在这一行停止执行:user.email=object.getString(“email”).toString()代码>因为JsonException
。因此,下面的代码不会被执行
若要解决名称的空错误,请将您的名称的代码拉到前面,其他人则在前面。使用:
try {
user = new User();
user.facebookID = object.getString("id").toString();
user.name = object.getString("name").toString();
user.gender = object.getString("gender").toString();
user.email = object.getString("email").toString();
PrefUtils.setCurrentUser(user,LoginActivity.this);
}catch (Exception e){
e.printStackTrace();
PrefUtils.setCurrentUser(user,LoginActivity.this);
}
第二选项
更好的方法是使用JSonObject的has()
方法,比如object.has(“email”)
;因此,您可以根据需要更准确地解析数据。是的,您是对的。非常感谢。:)谢谢:)。我认为我必须添加一个代码来检查电子邮件是否为空。你可以,但你得到的异常是JsonException…不是空指针…它可能发生在你的名称上,如果用户将其名称保持私有,那么graph api在某些情况下不会返回名称。我添加了if(object.has(“email”)){user.email=object.getString(“email”).toString();}否则{user.email=”“;}
try {
user = new User();
user.facebookID = object.getString("id").toString();
user.name = object.getString("name").toString();
user.gender = object.getString("gender").toString();
user.email = object.getString("email").toString();
PrefUtils.setCurrentUser(user,LoginActivity.this);
}catch (Exception e){
e.printStackTrace();
PrefUtils.setCurrentUser(user,LoginActivity.this);
}