Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何检查数据库引用子项是否存在_Android_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

Android 如何检查数据库引用子项是否存在

Android 如何检查数据库引用子项是否存在,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我正在聊天,想知道如何为一次对话设置一个id。当你给某人写信时,id是“yourId+friendId”,因此如果你的朋友想回答你,他的对话id应该仍然是“myId+hisId”。 我必须设置databasereference子id,但在此之前,我需要检查id“yourId+friendId”是否存在。我不知道怎么做。 这是我的密码: databaseMessages= FirebaseDatabase.getInstance().getReference("conversation"); fi

我正在聊天,想知道如何为一次对话设置一个id。当你给某人写信时,id是“yourId+friendId”,因此如果你的朋友想回答你,他的对话id应该仍然是“myId+hisId”。
我必须设置databasereference子id,但在此之前,我需要检查id“yourId+friendId”是否存在。我不知道怎么做。 这是我的密码:

databaseMessages= FirebaseDatabase.getInstance().getReference("conversation");
firebaseAuth=FirebaseAuth.getInstance();

if(databaseMessages.child(chattingUser.getUserId()+", "+firebaseAuth.getCurrentUser().getUid())!=null) {
        databaseMessagesChild = databaseMessages.child(chattingUser.getUserId() + ", " + firebaseAuth.getCurrentUser().getUid());
    }
else {
        databaseMessagesChild = databaseMessages.child(firebaseAuth.getCurrentUser().getUid() + ", " + chattingUser.getUserId());
    }
但它不起作用。 如何检查databaseMessages.child(chattingUser.getUserId()+,“+firebaseAuth.getCurrentUser().getUid())是否存在

这是我的全部代码:

public class Chat extends AppCompatActivity implements View.OnClickListener {

private User chattingUser;
FirebaseAuth firebaseAuth;
DatabaseReference databaseMessages, databaseMessagesChild;
ListView listViewConversation;
List<Message> messageList;


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.chat_screen);

    databaseMessages= FirebaseDatabase.getInstance().getReference("conversation");
    firebaseAuth=FirebaseAuth.getInstance();

    Intent intent=getIntent();
    chattingUser= (User) intent.getSerializableExtra("User");
    TextView nazwa = (TextView)findViewById(R.id.chat_with);
    nazwa.setText(chattingUser.getNickname());

    listViewConversation=(ListView)findViewById(R.id.list_conversation);
    //listViewConversation.scrollTo(0, listViewConversation.getScrollY());
    messageList=new ArrayList<>();



    databaseMessagesChild = databaseMessages.child(firebaseAuth.getCurrentUser().getUid() + ", " + chattingUser.getUserId());


    DatabaseReference mref=databaseMessages.child(chattingUser.getUserId()+", "+firebaseAuth.getCurrentUser().getUid());
    mref.addValueEventListener(new ValueEventListener() {
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()){
                databaseMessagesChild = databaseMessages.child(chattingUser.getUserId() + ", " + firebaseAuth.getCurrentUser().getUid());
                Log.v("wybralem", "pierwszy host");
                Log.v("i ten klucz to:", databaseMessagesChild.getKey());

            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });








/*
    if(databaseMessages.child(chattingUser.getUserId()+", "+firebaseAuth.getCurrentUser().getUid())!=null) {
        databaseMessagesChild = databaseMessages.child(chattingUser.getUserId() + ", " + firebaseAuth.getCurrentUser().getUid());
        Log.v("wybralem", "pierwszy host");
    }
    else {
        databaseMessagesChild = databaseMessages.child(firebaseAuth.getCurrentUser().getUid() + ", " + chattingUser.getUserId());
        Log.v("wybralem", "drugi host");
    } */


    Button send = (Button)findViewById(R.id.send_button);
    send.setOnClickListener(this);

}





@Override
protected void onStart() {
    super.onStart();
    Log.v("KEY",databaseMessagesChild.getKey());
    databaseMessagesChild.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            messageList.clear();

            for(DataSnapshot usersSnapshot : dataSnapshot.getChildren()){
                Message messages = usersSnapshot.getValue(Message.class);
                messageList.add(messages);

            }

            MessagesList adapter = new MessagesList(Chat.this, messageList);
            listViewConversation.setAdapter(adapter);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}






@Override
public void onClick(View v) {
    int i = v.getId();

    if(i==R.id.send_button){
        EditText message_field= (EditText) findViewById(R.id.message_field);
        String message_text=message_field.getText().toString();
        message_field.setText("");
        String myId=firebaseAuth.getCurrentUser().getUid().toString();
        Message message = new Message(myId, chattingUser.getUserId() , message_text);
        //Toast.makeText(Chat.this, firebaseAuth.getCurrentUser().getUid(), Toast.LENGTH_SHORT ).show();

        databaseMessagesChild.push().setValue(message);


    }

}
公共类聊天扩展AppCompatActivity实现View.OnClickListener{
私人用户聊天用户;
FirebaseAuth FirebaseAuth;
DatabaseReference databaseMessages,databaseMessagesChild;
ListView listViewConversation;
列表消息列表;
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_屏幕);
databaseMessages=FirebaseDatabase.getInstance().getReference(“对话”);
firebaseAuth=firebaseAuth.getInstance();
Intent=getIntent();
chattingUser=(用户)intent.getSerializableExtra(“用户”);
TextView nazwa=(TextView)findViewById(R.id.chat_with);
setText(chattingUser.get昵称());
listViewConversation=(ListView)findViewById(R.id.list\u conversation);
//scrollTo(0,listViewConversation.getScrollY());
messageList=newarraylist();
databaseMessagesChild=databaseMessages.child(firebaseAuth.getCurrentUser().getUid()+,“+chattingUser.getUserId());
DatabaseReference mref=databaseMessages.child(chattingUser.getUserId()+,“+firebaseAuth.getCurrentUser().getUid());
mref.addValueEventListener(新的ValueEventListener(){
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
databaseMessagesChild=databaseMessages.child(chattingUser.getUserId()+,“+firebaseAuth.getCurrentUser().getUid());
Log.v(“wybralem”,“pierwszy主机”);
Log.v(“i-ten-klucz-to:”,databaseMessagesChild.getKey());
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
/*
if(databaseMessages.child(chattingUser.getUserId()+,“+firebaseAuth.getCurrentUser().getUid())!=null){
databaseMessagesChild=databaseMessages.child(chattingUser.getUserId()+,“+firebaseAuth.getCurrentUser().getUid());
Log.v(“wybralem”,“pierwszy主机”);
}
否则{
databaseMessagesChild=databaseMessages.child(firebaseAuth.getCurrentUser().getUid()+,“+chattingUser.getUserId());
Log.v(“wybralem”,“drugi主机”);
} */
按钮发送=(按钮)findViewById(R.id.send_按钮);
send.setOnClickListener(this);
}
@凌驾
受保护的void onStart(){
super.onStart();
Log.v(“KEY”,databaseMessagesChild.getKey());
databaseMessagesChild.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
messageList.clear();
对于(DataSnapshot用户ssnapshot:DataSnapshot.getChildren()){
messages=usersSnapshot.getValue(Message.class);
messageList.add(消息);
}
messageslistadapter=newmessageslist(Chat.this,messageList);
setAdapter(适配器);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
@凌驾
公共void onClick(视图v){
inti=v.getId();
if(i==R.id.send_按钮){
EditText消息_字段=(EditText)findViewById(R.id.message_字段);
字符串message_text=message_field.getText().toString();
message_field.setText(“”);
字符串myId=firebaseAuth.getCurrentUser().getUid().toString();
Message Message=新消息(myId,chattingUser.getUserId(),消息文本);
//Toast.makeText(Chat.this,firebaseAuth.getCurrentUser().getUid(),Toast.LENGTH_SHORT).show();
databaseMessagesChild.push().setValue(消息);
}
}
}试试这个:

DatabaseReference mref=databaseMessages.child(chattingUser.getUserId()+", "+firebaseAuth.getCurrentUser().getUid());

mref.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){

                    }

                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

但是,当我启动intent时,如何在oncreate方法中检查它是否只存在一次?我尝试了你的解决方案,每次我发送消息时它都会检查。当然,我添加了整个类。你有两种方法,一种是添加一个标志来检查代码是否以简单的方式第一次执行,另一种是尝试将addValueEventListener()更改为addListenerForSingleValueEvent(),还有一个问题。如果我从第一个帐户启动新会话,我无法从第二个帐户获取消息。onStart方法中的bcs DatabaseMessagesHild始终具有相同的id。它从第一个实例保存id,而不是从mref onDataChange保存id。我已经尝试了所有方法,但无法处理它,你能帮我吗?但是在onClick方法databaseMessagesChild中有很好的id,所以我不知道为什么只有onStart方法id是错误的
databaseReference.orderByChild("id").equalTo(yourId + friendId).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            // Data exists
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
    }
});