2016-08-21 8 views
1

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文字列と同じ処理を行います。

誰でもアドバイスをお持ちですか?ありがとう!

答えて

1

executeAsync()メソッドを使用してFacebook API GraphRequestを実行しています。要求は別のスレッドで処理され、onComplete()応答は非同期に受信されます。私はFacebook APIを使用していませんが、要求を推測するにはFacebookサーバーとの通信が必要で、応答を送信するのに数ミリ秒かかるでしょう。

結果は、コールバック内のステートメントが実行され、好みに名前を格納している前に、これらのステートメント

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

が実行されることです。

+0

ああ、そうです。したがって、 '.setName()'はFacebookの応答が到着する前に実行されます。これは、 '.setName()'が実行されたときに 'fbookFirstNameForUpload'がヌルであることを意味します。これは、名前がFirebaseに追加されない理由です。私は 'onComplete()'レスポンスの中で 'setName(fbookFirstNameForUpload)'を実行できるはずですか? – langsmith

+0

@langsmith:はい、Facebookレスポンスに依存するコードをコールバックに移動するか、コールバックから呼び出す必要があります。 –

関連する問題