Android facebook登录电话号码返回null用户名

时间:2017-03-30 11:13:56

标签: android facebook login

我使用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 ??

提示:当其他帐户使用电子邮件登录时,它会正常显示名称。

1 个答案:

答案 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;这样您就可以根据需要更准确地解析数据。