Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有电话号码的Android facebook登录返回空用户名_Android_Facebook_Login - Fatal编程技术网

带有电话号码的Android 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(

我使用的是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();
    }
};
我知道例外是因为没有电子邮件。 但为什么在吐司中它给出(欢迎空) 输出中的名称返回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);
        }