Java 在Android中使用Facebook登录api时无法获取电子邮件

Java 在Android中使用Facebook登录api时无法获取电子邮件,java,android,facebook,api,Java,Android,Facebook,Api,我正在尝试获取一个已在我的应用程序中登录的个人资料的电子邮件,但我对此有问题 在函数onCompleted()中,我请求电子邮件,它会返回邮件,如果我创建日志,我会看到邮件不是空的,但如果我在onCompleted()函数内创建日志,它只会返回非空的内容,在函数外会抛出错误(无法传递结果信息{who=null,request=64206,result=-1,data=Intent{(有额外功能)}}到活动),我得到一个javaNullPointerException 谢谢你的帮助 loginBu

我正在尝试获取一个已在我的应用程序中登录的个人资料的电子邮件,但我对此有问题

在函数
onCompleted()
中,我请求电子邮件,它会返回邮件,如果我创建日志,我会看到邮件不是空的,但如果我在
onCompleted()
函数内创建日志,它只会返回非空的内容,在函数外会抛出错误(
无法传递结果信息{who=null,request=64206,result=-1,data=Intent{(有额外功能)}}到活动
),我得到一个
javaNullPointerException

谢谢你的帮助

loginButton = (LoginButton) findViewById(R.id.loginButton);
    loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    if (response.getError() != null) {
                        System.out.print("ERROR");
                    }
                    else {
                        fbUserMail = object.optString("email");
                        Log.d("email",fbUserMail); //THIS GETS ME THE EMAIL
                    }
                }
            });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "email");
            request.setParameters(parameters);
            request.executeAsync();

            Log.d("emailoutside", fbUserMail); //THIS THROWS ME A NULLPOINTEREXCEPTION
            Profile profile = Profile.getCurrentProfile();
            goMainActivity(profile,fbUserMail);
        }
loginButton=(loginButton)findViewById(R.id.loginButton);
setReadPermissions(Arrays.asList(“public_profile”,“email”));
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
if(response.getError()!=null){
系统输出打印(“错误”);
}
否则{
fbUserMail=object.optString(“电子邮件”);
Log.d(“email”,fbUserMail);//这会让我收到电子邮件
}
}
});
Bundle参数=新Bundle();
参数。putString(“字段”、“电子邮件”);
请求。设置参数(参数);
request.executeAsync();
Log.d(“emailoutside”,fbUserMail);//这会引发一个NULLPOINTEREXCEPTION
Profile Profile=Profile.getCurrentProfile();
goMainActivity(个人资料、fbUserMail);
}
我的问题仍然存在

public class getProfileData extends AsyncTask<AccessToken,String,String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(AccessToken... params) {
        GraphRequest request = GraphRequest.newMeRequest(params[0], new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {
                Log.v("LoginScreen", response.toString());
                try {
                    name = object.getString("first_name");
                    surname = object.getString("last_name");
                    email = object.getString("email");
                    Log.d("name",name);
                    Log.d("surname",surname);
                    Log.d("email",email); //THIS GETS ME THE EMAIL
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,first_name,last_name,email");
        request.setParameters(parameters);
        request.executeAndWait();

        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        Log.d("email",email); //THIS THROWS ME AN EXCEPTION
        if (profile != null) {
            Log.d("email", email); //THIS DOESN'T THROW NOTHING
            Intent main = new Intent(LoginScreen.this, MainActivity.class);
            main.putExtra("name", profile.getFirstName());
            main.putExtra("surname", profile.getLastName());
            main.putExtra("imageUrl", profile.getProfilePictureUri(400,400).toString());
            main.putExtra("email", s);
            startActivity(main);
            finish();
        }
    }
}
公共类getProfileData扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(AccessToken…参数){
GraphRequest request=GraphRequest.NewMereRequest(参数[0],new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
Log.v(“LoginScreen”,response.toString());
试一试{
name=object.getString(“first_name”);
姓氏=object.getString(“姓氏”);
email=object.getString(“email”);
Log.d(“名称”,名称);
Log.d(“姓氏”,姓氏);
Log.d(“email”,email);//这就得到了电子邮件
}捕获(JSONException e){
e、 printStackTrace();
}
}
});
Bundle参数=新Bundle();
parameters.putString(“字段”、“id、名字、姓氏、电子邮件”);
请求。设置参数(参数);
request.executeAndWait();
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
Log.d(“email”,email);//这给我带来了一个异常
if(profile!=null){
Log.d(“email”,email);//这不会抛出任何东西
Intent main=新的Intent(LoginScreen.this、MainActivity.class);
main.putExtra(“name”,profile.getFirstName());
main.putExtra(“姓氏”,profile.getLastName());
main.putExtra(“imageUrl”,profile.getProfilePictureUri(400400.toString());
main.putExtra(“电子邮件”,s);
星触觉(主);
完成();
}
}
}
我认为问题来自request.executeAndWait();

检查此->可能重复的