Как перенести данные после успешного входа в Facebook на Android

Я успешно вошел в facebook без каких-либо проблем. После получения данных из facebook мне нужно перенести эти данные в другое действие, как только я успешно вошел в систему. Вот мой код.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_up);
    loginButton = (LoginButton) findViewById(R.id.login_button);
    signUpWithFaceBook = (Button) findViewById(R.id.signUpUsingFaceBook);
    callbackManager = CallbackManager.Factory.create();
    signUpWithFaceBook.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loginButton.performClick();
        }
    });
    loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday", "user_friends"));
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            System.out.println("onSuccess");
            token = loginResult.getAccessToken().getToken();

            GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest
                    .GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    Log.d("response", response.toString());
                    getData(object);
                }
            });
            //Graph API
            Bundle parameter = new Bundle();
            parameter.putString("fields", "id,first_name,last_name");
            request.setParameters(parameter);
            request.executeAsync();
            try {
                Intent intent = new Intent();
                intent.putExtra("firstName", firstname);
                intent.putExtra("lastName", lastname);
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

А в onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

И, Этот код старый, все еще такой же способ интеграции FB в Android?

Вызовите свой метод startactivity после метода запроса графа onCompleted.

Mohamed Mohaideen AH 23.08.2018 09:49
1
1
25
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Свяжите свои данные в Bundle и поместите их в putExtras для намерения. Вы получаете Bundle в новом Activity.

While put data into Bundle.

Bundle bundle = new Bundle(); 
bundle.putString("firstName",firstname);
bundle.putString("lastName",lastname); 

Intent i = new Intent(SignUpActivity.this,RegistrationActivity.class); 
i.putExtras(bundle); 
startActivity(i);

Get Bundle at your RegistrationActivity.java

   Bundle b = getIntent().getExtras();
   String fName = b.getString("firstName");
   String lName = b.getString("lastName");

Also your putExtras() code in getData() after your GraphRequest Call

Обновлять

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        System.out.println("onSuccess");
                        token = loginResult.getAccessToken().getToken();

                        GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest
                                .GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                Log.d("response", response.toString());
                                getData(object);

                                try {

                                    Bundle bundle = new Bundle();
                                    bundle.putString("firstName",object.getString("first_name"));
                                    bundle.putString("lastName",object.getString("lastName"));


                                    Intent i = new Intent(SignUpActivity.this,RegistrationActivity.class);
                                    i.putExtras(bundle);
                                    startActivity(i);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        });
                        //Graph API
                        Bundle parameter = new Bundle();
                        parameter.putString("fields", "id,first_name,last_name");
                        request.setParameters(parameter);
                        request.executeAsync();
                    }
    }

Он несет нулевые данные. Я сделал degub и увидел данные, которые показывают null `Bundle bundle = new Bundle (); bundle.putString ("firstName", имя); bundle.putString ("lastName", фамилия); Intent i = новое намерение (SignUpActivity.this, RegistrationActivity.class); i.putExtras (комплект); startActivity (я); `

sugiz 23.08.2018 09:42

Ваш ответ правильный. Я получаю данные сейчас, но изначально, когда я установил приложение и вошел в систему с помощью facebook, я не получаю никаких данных. потому что bundle.putString("firstName",firstname); запущен и изначально равен нулю. Затем он запускает firstname = object.getString("first_name"); в getData (), где я получаю свои данные из FB. Любое решение для этого.

sugiz 23.08.2018 10:04

Теперь я получаю данные в правильной последовательности, но не могу начать другое действие.

sugiz 23.08.2018 10:20

Kabari Я отслеживаю проблему по отладке. В своем ответе вы изменили last_name на lastName. что дает исключение json lastName not found. в любом случае спасибо за ответ. моя проблема решена.

sugiz 23.08.2018 10:45

Ого, извините за мою ошибку.

Mehul Kabaria 23.08.2018 10:48

Попробуй это

GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {
                try {
                    String userID = (String) object.get("id");
                    String firstname = (String) object.get("first_name"); 
                    String lastname = (String) object.get("last_name");                                              

                     Intent intent = new Intent(MainActivity.this,NextActivity.class); //MainActivity is current activity & NextActivity is any activity that is destination activity.
                     intent.putExtra("firstName", firstname);
                     intent.putExtra("lastName", lastname);
                     startActivity(intent);

                } catch (JSONException|Exception e) {
                    e.printStackTrace();
                }
            }
        });

        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,first_name,last_name");
        request.setParameters(parameters);
        request.executeAsync();

Вы начали деятельность, но собираетесь заниматься какой-либо деятельностью. Я не знаю, что здесь происходит. Я начинающий

sugiz 23.08.2018 10:10

@sugiz, извини, я не могу тебя достать. Я поместил ваш код намерения в метод onCompleted для graphrequest. Bcoz graphrequest выполняет async, поэтому при запуске действия в одно и то же время значение данных остается нулевым.

Mohamed Mohaideen AH 23.08.2018 10:12

Есть проблема, как начать другое действие, вы можете проверить здесь developer.android.com/training/basics/firstapp/… и просто изменить свое намерение на Intent i = new Intent(Mainactivity.this,NextActivity.class) ...

Mohamed Mohaideen AH 23.08.2018 10:17

Другие вопросы по теме