Android, как получить информацию о пользователе Facebook, когда пользователь уже вошел в систему - PullRequest
0 голосов
/ 31 мая 2018

Как я могу получить информацию Facebook пользователя, когда он уже вошел в систему?Я думаю, что я делаю все хорошо, но это не работает ..

1-й.Я получаю accessToken и проверяю, существует ли он.Если он существует, я пытаюсь получить пользовательские данные.

AccessToken accessToken = AccessToken.getCurrentAccessToken();

   if (accessToken != null) {

      String userData = getUserDataFromFacebook(accessToken, headerTitle);

      headerTitle.setText(userData);
   }

2nd.Я пытаюсь получить пользовательские данные так же, как я получаю их при первом входе в Facebook.

getUserDataFromFacebook:

    private String getUserDataFromFacebook(AccessToken accessToken, final TextView headerTitle) {

Log.v("LoginActivity", "I am here");  // this log works

        GraphRequest.newMeRequest(
                accessToken,
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {

                        Log.v("LoginActivity", "RESPONSE: " + response); //this log doesn`t work.

                        // Application code
                        try {
                             Log.v("LoginActivity", "I am here"); //this log doesn`t work
                             name = object.getString("name");

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

                });

        return name;

    }

Самая большая проблема заключается в том, что метод onCompleted не вызывается, и я не могу получить доступ к любой информации,Я понятия не имею, почему ..

PS Я ужасен на Java, и это мое первое приложение для Android.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы на самом деле не выполняете запрос.

GraphRequest request = GraphRequest.newMeRequest(
        accessToken,
        new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                   JSONObject object,
                   GraphResponse response) {
                // your logic
            }
        });
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link");
request.setParameters(parameters);
request.executeAsync();

Имейте в виду, что это асинхронный вызов, поэтому вы не можете вернуть имя из функции, как пытались сделать.Вместо этого вам придется реализовать механизм обратного вызова.

0 голосов
/ 31 мая 2018

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

private void getUserDataFromFacebook() {
            GraphRequest request = GraphRequest.newMeRequest(
                    AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            Log.e(" Response", response.toString());
                            String res = (String) object.toString();
                            Log.e("Response", res);
                            Gson gson = new Gson();
                            if (res.length() > 0) {

                               //do your work here with your res

                            } else {
                                Utils.showDialog(SelectFacebookAlbumActivity.this, "",
                                        "Error in getting data");
                            }

                        }
                    });

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

Дайте нам знать, что это работает для вас.

...