2017-02-22 5 views
1

의 호출되지 않습니다. 나는이 사용자의 싱글 룸을 설정 FireBaseDatabase.updateChildren(RoomName)를 호출하고 있습니다.OnDataChange는 내가 중포 기지 데이터베이스를 사용하고 한 채팅 하나를 시작하는 데이터베이스에 고유의 자식 노드를 작성해야하고 중포 기지 데이터베이스

심지어 여기

public void onCancelled(DatabaseError databaseError)에없는 FireBaseDatabase.addListenerForSingleValueEvent(new ValueEventListener()

및 방법의 리스너 없음에 따라 호출에 문제를 호출 데 나의 코드

fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Snackbar.make(view, "Hello I am SnackBar", Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
     Log.d(TAG, "User Session Value " + userSession); 
     userSession = new UserSession(getActivity(), "Pref_FileName"); 
     Log.d(TAG, "User Session Value After Init " + userSession); 
     final Map<String, Object> RoomName = new HashMap<>(); 
     RoomTitle = userSession.getPhoneNO() + "-" + UserData.getPhone(); 
     otherUserRoom = UserData.getPhone() + "-" + userSession.getPhoneNO(); 
     Log.d(TAG, "Room Title Should Be " + RoomTitle); 


     DatabaseReference FireBaseDatabase = FirebaseDatabase.getInstance().getReference(); 



     Log.d(TAG, "Chat room name from Database " + db.toString()); //GETTING THIS VALUE IN LOG 

     FireBaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot.hasChild(RoomTitle)) { 
        intent2.putExtra("Get_Other",RoomTitle); 
        Log.d(TAG,"Room Exists No Need To Create It "+RoomTitle); // THIS LOG NEVER GENERATE 
        RoomNameFinal=RoomTitle; 

       } 
       else if (dataSnapshot.hasChild(otherUserRoom)){ 
        intent2.putExtra("Get_Other",otherUserRoom); 
        Log.d(TAG,"Room Exists No Need To Create It "+otherUserRoom);// THIS LOG NEVER GENERATE 
        RoomNameFinal=otherUserRoom; 


       } 

       else { 
        Log.d(TAG,"None Of the above Room exist so Create one with RoomTitle "+RoomName);// THIS LOG NEVER GENERATE 
        intent2.putExtra("Get_Other",RoomTitle); 
        RoomName.put(RoomTitle, ""); 
        FireBaseDatabase.updateChildren(RoomName); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.d(TAG,"On Cancelled Calling "+databaseError.getDetails()); // THIS LOG NEVER GENERATE 
       Log.d(TAG,"On Cancelled Calling "+databaseError.getMessage()); // THIS LOG NEVER GENERATE 
       Log.d(TAG,"On Cancelled Calling "+databaseError.toString()); // THIS LOG NEVER GENERATE 

      } 


     }); 



     intent2.putExtra("Get_Phone", UserData.getPhone()); 
     intent2.putExtra("Get_Image", UserData.getImage()); 
     intent2.putExtra("Get_Name", UserData.getName()); 
     Log.d(TAG,"Room Name Final "+RoomNameFinal); 
     startActivity(intent2); 

    } 
}); 

편집이다 : 나는 아이를 추가하고 어디 내 중포 기지 데이터베이스에서 enter image description here

답변

0

저는 코드에서 일부 편집을 통해 해결했습니다. 왜 이런 일이 일어 났는지는 확실하지 않지만이 문제에 여전히 머물러있는 일부 사람들에게는 약간의 도움이 될 것입니다. 대신 onDataChange에 직접에서 FireBaseDatabase.updateChildren(RoomName)를 호출 난 onDataChange

fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Snackbar.make(view, "Hello I am SnackBar", Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
     Log.d(TAG, "User Session Value " + userSession); 
     userSession = new UserSession(getActivity(), "Pref_File"); 

     RoomName = new HashMap<>(); 
     RoomTitle = userSession.getPhoneNO() + "-" + UserData.getPhone(); 
     otherUserRoom = UserData.getPhone() + "-" + userSession.getPhoneNO(); 
     Log.d(TAG, "Room Title Should Be " + RoomTitle); 


     DatabaseReference db = FirebaseDatabase.getInstance().getReference(); 



     Log.d(TAG, "Chat room name from Database " + db.toString()); 


     db.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 

      public void onDataChange(DataSnapshot dataSnapshot) { 
       Log.d(TAG,"On Data Change Calling "+dataSnapshot); 
       if (dataSnapshot.hasChild(RoomTitle)) { 
        Log.d(TAG,"Room Exists No Need To Create It 1"+RoomTitle); 
        RoomName(RoomTitle,false); 

       } 
       else if (dataSnapshot.hasChild(otherUserRoom)){ 
        Log.d(TAG,"Room Exists No Need To Create It 2 "+otherUserRoom); 

        RoomName(otherUserRoom,false); 

       } 
       else { 
        Log.d(TAG,"None Of the above Room exist so Create one with RoomTitle "+RoomName); 
        RoomName(RoomTitle,true); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.d(TAG,"On Cancelled Calling "+databaseError.getDetails()); 
       Log.d(TAG,"On Cancelled Calling "+databaseError.getMessage()); 
       Log.d(TAG,"On Cancelled Calling "+databaseError.toString()); 

      } 


     }); 

난 내 앞의 코드의 경우, else 문에서 호출되지 FireBaseDatabase.updateChildren(RoomName)를 호출하기 위해 만든이 방법에서 호출하는 방법을 만들 수 있습니다.

public void RoomName (String Name,boolean RoomExist){ 

    if (RoomExist){ 
     Log.d(TAG,"Room Not Exist Creating One in METHOD NAME ROOM NAME "+RoomExist); 
     RoomName.put(Name, ""); 
     FireBaseDatabase.updateChildren(RoomName); 
    } 

    Log.d(TAG,"Method ROOM NAME CALLING Value Of ROOM NAME FINAL "+Name); 
    intent = new Intent(getActivity(), Chat_Screen.class); 
    intent.putExtra("Get_Phone", UserData.getPhone()); 
    intent.putExtra("Get_Image", UserData.getImage()); 
    intent.putExtra("Get_Name", UserData.getName()); 
    intent.putExtra("Get_Other",Name); 
    startActivity(intent); 
} 

이제 내 onDataChange 전화 나는 그것이 문제의 같은 종류의 사람을 것입니다 희망 말해라한다. 내가 루트를 참조하고 자식이없는이 전 소위 onDatachanged 때

0

당신은 단순히 산업사하는 것을 잊지 기능 getReference()에 데이터베이스 참조의 이름을 icate.

https://myproject.firebaseio.com/message

이를 : 당신이 메시지를 얻으려면

예를 들어, 당신이

DatabaseReference myRef = database.getReference("message"); 

그리고 내 데이터베이스의 URL의 모습 같은 것을 함께 DatabaseReference를 설정해야 객체 URL은 중포 기지 대시 보드의 RealTimeDatabase 탭의 상단에 표시됩니다.

희망 도움말.

+0

은 내가 루트에 자녀를 추가하고있다. 'FirebaseDatabaseFirebaseDatabase.getInstance(). getReference();'루트로 돌아가서 루트에 공간을 추가합니다. – androidXP

+0

위 이미지를 확인하여 내 노드가 FirebaseDatabase에서 어떻게 보이는지 확인하십시오. – androidXP

+0

이 DatabaseReference를 사용해보십시오. databaseReference = FirebaseDatabase.getInstance(). getReference() .getRoot(); –

관련 문제