我正在開發使用Facebook登錄的Android應用程序。登錄工作正常,我可以通過Facebook Graph API調用獲取信息。Facebook SDK阻止將字符串上傳到Firebase
我想上傳一個字符串到我的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字符串設置爲該Parent對象的其他變量。
無論我做什麼,名字不上火力地堡現身!我不知道我做錯了什麼!
我也嘗試使用共享首選項,以防在Facebook調用的onCompleted()方法中設置parentFirstNameFromFacebook時出現問題。我把parentFirstNameFromFacebook放在SharedPref中,然後通過parent.setName()傳遞給它。
一旦我成功上傳名字,那麼我將爲fbook圖像URl字符串執行相同的過程。
任何人有任何建議?謝謝!
啊,我明白了。所以'.setName()'在Facebook響應到達之前運行。這意味着'.setName()'運行時'fbookFirstNameForUpload'爲空....這就是爲什麼名稱不會被添加到我的Firebase中的原因。我應該可以在'onComplete()'響應中運行'setName(fbookFirstNameForUpload)',對吧? – langsmith
@langsmith:是的,您必須將取決於Facebook響應的代碼移入回調或在回調中調用它。 –