java - Facebook SDK 阻止将字符串上传到 Firebase

标签 java android facebook-graph-api facebook-sdk-4.0

我正在开发一个使用 Facebook 登录的 Android 应用程序。登录工作正常,我能够通过 Facebook Graph API 调用取回信息。

我正在尝试将一个字符串上传到我的 Firebase 数据库,该字符串(标题为 parentFirstNameFromFacebook)是登录 Facebook 的用户的名字。我试图最终在其 setName() 方法中使用 parentFirstNameFromFacebook 上传父对象。

doneCreatingNameAndPasswordFAB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            gettingTextFromNameAndPasswordEditTexts();


            //region creating new Parent object and setting required variables
            Parent coOpCreatingParent = new Parent();

            coOpCreatingParent.setCoopCreator(true);
            coOpCreatingParent.setNumOfHoursOwned(0);


            Bundle params = new Bundle();
            params.putString("fields", "id,first_name");
            new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
                    new GraphRequest.Callback() {
                        @Override
                        public void onCompleted(GraphResponse response) {

                            if (response != null) {
                                try {
                                    JSONObject data = response.getJSONObject();

                                    parentFirstNameFromFacebook = data.getString("first_name");

                                    SharedPreferences fBookSharedPref;
                                    SharedPreferences.Editor editor;

                                    fBookSharedPref = getSharedPreferences(Constants.FBOOK_NAME_SHARED_PREF, Context.MODE_PRIVATE);
                                    editor = fBookSharedPref.edit();
                                    editor.putString(Constants.FBOOK_NAME_SHARED_PREF, parentFirstNameFromFacebook);
                                    editor.apply();


                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }).executeAsync();



            SharedPreferences fBookSharedPref = getSharedPreferences(Constants.FBOOK_NAME_SHARED_PREF, Context.MODE_PRIVATE);

            fbookFirstNameForUpload = fBookSharedPref.getString(Constants.FBOOK_NAME_SHARED_PREF, null);


            coOpCreatingParent.setName(fbookFirstNameForUpload);


            getProfileImageUrlFromFBookGraph();

            coOpCreatingParent.setImageUrl(parentImageIDFromFBookGraph);


            ArrayList<Child> newChildArrayList = new ArrayList<>();

            coOpCreatingParent.setChildren(newChildArrayList);


            //endregion

            //region creating new ArrayList<Parent> adding Parent object from above
            ArrayList<Parent> coOpParentArrayList = new ArrayList<>();
            coOpParentArrayList.add(coOpCreatingParent);
            //endregion

            getReferenceOfCoOpBeingCreated();

            //region uploading entire new Co-Op object to Firebase
            CoOp coOpObjectBeingUploaded = new CoOp(coOpKey, enteredNewCoOpPassword, enteredNewCoOpName, coOpParentArrayList);
            referenceOfCoOp.setValue(coOpObjectBeingUploaded);
            //endregion

            //region going to AddChildren Activity with Co-Op key in intent
            Intent intentForNewActivity = new Intent(getBaseContext(), AddChildrenActivity.class);
            intentForNewActivity.putExtra(Constants.CO_OP_REFERENCE_TO_CHILD_ACTIVITY_KEY, coOpKey);
            startActivity(intentForNewActivity);
            //endregion


        }
    });

在下面的 Firebase 截图中,parentsInCoOp 是一个 ArrayList,它下面的 0 是 Parent 对象。我正在尝试将名称和 Facebook URL 字符串设置为该父对象的其他变量。

Firebase screenshot

无论我做什么,名称都不会显示在 Firebase 上!我不确定我做错了什么!

我还尝试使用共享首选项,以防在 Facebook 调用的 onCompleted() 方法中设置 parentFirstNameFromFacebook 时出现问题。我将 parentFirstNameFromFacebook 放在 SharedPref 中,然后将其取出以通过 parent.setName() 传递它。

成功上传名字后,我将对 fbook 图片 URl 字符串执行相同的过程。

有人有什么建议吗?谢谢!

最佳答案

您正在使用 executeAsync() 方法执行 Facebook API GraphRequest。该请求在单独的线程上处理,并且异步接收 onComplete() 响应。我不使用 Facebook API,但我猜测请求需要与 Facebook 服务器通信,并且需要很多毫秒才能提供响应。

结果就是这些语句

fbookFirstNameForUpload =
     fBookSharedPref.getString(Constants.FBOOK_NAME_SHARED_PREF, null);
coOpCreatingParent.setName(fbookFirstNameForUpload);

在回调中的语句执行之前执行并将名称存储在首选项中。

关于java - Facebook SDK 阻止将字符串上传到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059875/

相关文章:

Android Studio 0.4.+ 自定义调试 keystore

javascript - 通过 Javascript 连接到 Facebook API 时如何重新加载/刷新 facebook like 按钮

java - 错误:(18,29)Java:预期的 ';' +错误:(18,39)Java:不是语句

java - AspectJ 列出所有连接点

java - 技术范围 - 从哪里开始以及如何开始?

ios - React-native 应用程序和 Facebook SDK

ios - FBSDKShareButton 即使在用户登录后也被禁用?

java - 向 Java 程序添加一个在特定点打开和关闭的消息框

android - GCM ACCOUNT_MISSING 错误

android - 带圆边的 ActionBar