我使用Facebook登录代码,在尝试使用电子邮件登录时效果很好。 我现在正尝试使用电话号码登录帐户。
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();
}
};
LogCat中的:
E/response:: {Response: responseCode: 200, graphObject: {"id":"101371863742753","name":"Hammody Elhossiny","gender":"male"}, error: null}
E/object:: {"id":"101371863742753","name":"Hammody Elhossiny","gender":"male"}
W/System.err: org.json.JSONException: No value for email
W/System.err: at org.json.JSONObject.get(JSONObject.java:389)
W/System.err: at org.json.JSONObject.getString(JSONObject.java:550)
W/System.err: at com.example.android.facebookloginsample.LoginActivity$2$1.onCompleted(LoginActivity.java:111)
W/System.err: at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:295)
W/System.err: at com.facebook.GraphRequest$5.run(GraphRequest.java:1243)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
10710-10710/com.example.android.facebookloginsample I/System.out: UserID: 101371863742753 Name: null
2312-2324/? I/ActivityManager: START u0 {cmp=com.example.android.facebookloginsample/.LogoutActivity} from uid 10060 on display 0
1177-1177/? W/SurfaceFlinger: couldn't log to binary event log: overflow.
我知道例外是因为没有电子邮件。 但为什么在吐司它给出(欢迎null) 输出中的Name返回Null ??
提示:当其他帐户使用电子邮件登录时,它会正常显示名称。
答案 0 :(得分:1)
这是因为代码执行风格: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
。所以下面的代码没有被执行。
为名称解析null错误拉取你的名字的代码,其他人提前。使用方法:
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);
}
第二个选项
更好地使用has()
的{{1}}方法JSonObject
;这样您就可以根据需要更准确地解析数据。