私はfirebaseデータベースを使用しており、1対1のチャットを開始するためにデータベースに一意の子ノードを作成する必要があります。私はFireBaseDatabase.updateChildren(RoomName)
に2人のユーザーのためのシングルルームを設定するように呼びます。OnDataChangeはFIREbaseデータベースを呼び出すことはありません
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);
}
});
である。ここでもpublic void onCancelled(DatabaseError databaseError)
にない呼び出していない下の問題を抱えてい
onDatachangedがこれを呼び出す前に子を追加しようとしていますが、これは子供がいないため、私はrootを参照しています。 (FirebaseDatabaseFirebaseDatabase.getInstance()。getReference(); 'ルートに戻り、私はルートに部屋を追加しています – androidXP
ノードをFirebaseDatabaseでどのように見ているかを知るには上記の画像をチェックしてください。 – androidXP
このDatabaseReferenceを試してくださいdatabaseReference = FirebaseDatabase.getInstance()。getReference .getRoot(); –