如何使用Facebook登录将用户数据发送到新活动?

时间:2016-01-18 19:30:57

标签: java android android-intent android-activity facebook-android-sdk

我一直在使用Facebook登录识别用户的应用程序中工作。现在,我已成功添加登录,但我需要获取一些用户信息(如姓名和年龄)并将其发送到新活动。我一直在寻找如何做到这一点,我只是发现了如何自己做这些,当我尝试做这两个应用程序崩溃。 这是我当前的onCreate()方法:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    setContentView(R.layout.activity_entry);
    info = (TextView)findViewById(R.id.info);

    facebookButton = (LoginButton) findViewById(R.id.facebook_button);
    facebookButton.setReadPermissions(Arrays.asList("public_profile, user_birthday"));

    facebookButton.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) {
                            // Application code
                            Log.v("LoginActivity", response.toString());
                        }
                    });

            Bundle parameters = new Bundle();
            parameters.putString("fields", "id, name, gender, birthday");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            info.setText(getString(R.string.facebook_login_cancel));
        }

        @Override
        public void onError(FacebookException e) {
            info.setText(getString(R.string.facebook_login_fail));
        }
    });
}

所以现在,我的问题是我如何给予&#34;创建的包以启动新的活动以及如何访问此数据。我已经尝试过这样做了#34;正常&#34;方式,即使没有捆绑,

Intent intent = new Intent(LogInActivity.this, BlankActivity.class);
startActivity(intent);

我登录后每次都会崩溃。

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

将它放在OnSuccess方法而不是Bundle paraneters ......

public void onSuccess(LoginResult loginResult) {
        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject object,
                            GraphResponse response) {
                        // Application code
                        Log.v("LoginActivity", response.toString());
                    }
                });

         Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
         intent.putExtra("keyName", value);  
         startActivity(intent);

    }

并检索活动B中的信息:

String data = getIntent().getExtras().getString("keyName","defaultKey");

答案 1 :(得分:0)

您可以使用LoginManager。为Facebook登录调用点击事件。

@Override
        public void onClick(View v) {
     List<String> permissionNeeds = Arrays.asList("user_photos", "email", "user_friends", "user_posts");
                    LoginManager.getInstance().logInWithReadPermissions(this, permissionNeeds);

    }

Then add this function:

private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();

                AccessToken accessToken = loginResult.getAccessToken();
    GraphRequest request = GraphRequest.newMeRequest(
                            loginResult.getAccessToken(),
                            new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(JSONObject object, GraphResponse response) {
                                    JSONObject me = response.getJSONObject();
                                    try {
                                        if (me != null) {
                                            User userObj = new UserData().GetFBUserData(object);

                                                String text = me.getString("email");
                                            Log.d("email", text);
                                            String email = object.optString("email");
                                            String id = object.optString("id");
                                            String name = object.optString("name");
                                        }

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            });
                    String REQUEST_FIELDS =
                            TextUtils.join(",", new String[]{"id", "name", "link", "email", "picture", "gender", "birthday","friendlists{id}","friends"});
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", REQUEST_FIELDS);
                    request.setParameters(parameters);
                   GraphRequest.executeBatchAsync(request);

                Profile profile = Profile.getCurrentProfile();
                //mTextDetails.setText(constructWelcomeMessage(profile));
            }
    }

此代码正常运行。我实现了这段代码。此代码将返回用户配置文件,如名称,电子邮件,图像。您可以从onCompleted函数内部调用新活动。

相关问题