Facebook Loginを使用するAndroidアプリを開発しています。ログインは正常に機能しており、Facebook Graph APIコール経由で情報を取得できます。Firebirdへの文字列のアップロードをブロックするFacebook SDK
私はFirebaseデータベースに文字列をアップロードしようとしています。この名前の文字列(parentFirstNameFromFacebook)はFacebookにサインインしたユーザーの名前です。私は最終的にparentFirstNameFromFacebookを持つ親オブジェクトをそのsetName()メソッドにアップロードしようとしています。以下Firebaseスクリーンショットで
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
}
});
、parentsInCoOpはArrayListのであり、それ以下の0は、親オブジェクトです。私はその親オブジェクトのための他の変数として名前とFacebookのURL文字列を設定しようとしています。
Firebase screenshotは私が何であれ、名前がFirebaseに表示されません!私は何が間違っているのか分からない!
FacebookコールのonCompleted()メソッド内でparentFirstNameFromFacebookを設定する際に問題がある場合のために、Shared Preferencesを使用してみました。 SharedFrefにparentFirstNameFromFacebookを入れ、parent.setName()で渡すようにしました。
最初の名前が正常にアップロードされたら、fbookイメージのUR1文字列と同じ処理を行います。
誰でもアドバイスをお持ちですか?ありがとう!
ああ、そうです。したがって、 '.setName()'はFacebookの応答が到着する前に実行されます。これは、 '.setName()'が実行されたときに 'fbookFirstNameForUpload'がヌルであることを意味します。これは、名前がFirebaseに追加されない理由です。私は 'onComplete()'レスポンスの中で 'setName(fbookFirstNameForUpload)'を実行できるはずですか? – langsmith
@langsmith:はい、Facebookレスポンスに依存するコードをコールバックに移動するか、コールバックから呼び出す必要があります。 –