Facebook图形API -什么是最好的地方检索用户数据在android Facebook登录



我这样做是为了检索用户数据,不是在loginButton.registerCallback中,而是如下所示我注意到request.executeAsync();,这似乎是一个async,如果是,它跑出了UI线程。

1。是这样的吗?

问题是当我运行

Toast.makeText(getApplicationContext(), "Welcome " +name, Toast.LENGTH_SHORT).show();

这运行(但名称= null)和下面,如果我添加一个意图,它会到下一个活动,但我检索的数据是null..

我删除了意图,在中间添加了一个调试点(让我们在这里说-> String gender = object.getString("gender");)

现在第一个吐司显示(欢迎null),然后它来到调试点,当我逐行检索数据显示在我的评估器在调试模式。这似乎需要时间来加载它/是因为异步?

在任何其他任务之前(在toast之前)检索数据的任何建议。

哪里出错了:'(

     //Register a Callback
            LoginManager.getInstance().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) {
                                            try {
                                                String id = object.getString("id");
                                                String email = object.getString("email");
                                                 name = object.getString("name");
                                                String gender = object.getString("gender");
                                                String birthDay = object.getString("birthday");
                                                JSONObject pictureObject = object.getJSONObject("picture");
                                                JSONObject dataInPicture = pictureObject.getJSONObject("data");
                                                String pictureURLInData = dataInPicture.getString("url");

                                            } catch (Exception e) {
                                                System.out.println("ExceptionExceptionGraphRequest" + e);
                                                e.printStackTrace();
                                            }
                                        }
                                    });
                            Bundle parameters = new Bundle();
                            parameters.putString("fields", "id,email,name,gender, birthday,picture.type(large)");
                            parameters.putBoolean("redirect", false);
                            request.setParameters(parameters);
                            request.executeAsync();
                            // App code
                            Toast.makeText(getApplicationContext(), "Welcome " +name, Toast.LENGTH_SHORT).show();

                        }

这样我解决了我的问题。为我所做的更改添加了注释!

//Register a Callback
            LoginManager.getInstance().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) {
                                            try {
                                                System.out.println("LetsseewhatwegotForFB" + object.toString());
                                                String id = object.getString("id");
                                                String email = object.getString("email");
                                                Constants.FB_USER_ID =id;
                                                 name = object.getString("name");
                                                String gender = object.getString("gender");
                                                String birthDay = object.getString("birthday");
                                                JSONObject pictureObject = object.getJSONObject("picture");
                                                JSONObject dataInPicture = pictureObject.getJSONObject("data");
                                                String pictureURLInData = dataInPicture.getString("url");
                                                Constants.SOCIAL_NETWORK_IMAGE_URL = pictureURLInData;
                                                System.out.println("urlData"+pictureURLInData);
                                                //--- after  retrieve data do your task but inside like this(inside),in below ,not after bundle
                                                Toast.makeText(getApplicationContext(), "Welcome " +name, Toast.LENGTH_SHORT).show();
                                                buttonToLoadDashboard.performClick();  // my intent 
                                            } catch (Exception e) {
                                                System.out.println("ExceptionExceptionGraphRequest" + e);
                                                e.printStackTrace();
                                            }
                                        }
                                    });
                            Bundle parameters = new Bundle();
                            //--picture.type(large) increase the quality of image
                            parameters.putString("fields", "id,email,name,gender, birthday,picture.type(large)");
                            request.setParameters(parameters);
                            request.executeAsync();
                        }

最新更新