Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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 如何从Firebase的多个节点将特定节点数据提取到此布局?_Android_Authentication_Firebase Realtime Database_Firebase Authentication_Chat - Fatal编程技术网

Android 如何从Firebase的多个节点将特定节点数据提取到此布局?

Android 如何从Firebase的多个节点将特定节点数据提取到此布局?,android,authentication,firebase-realtime-database,firebase-authentication,chat,Android,Authentication,Firebase Realtime Database,Firebase Authentication,Chat,我成功地在应用程序的布局中加载了每个用户特定的UID。图为: 在注册时,我还将用户的电子邮件和密码保存到“用户”节点下的数据库中。以下是数据库屏幕截图: 可以清楚地看到,所有消息都保存在“MessageTest”节点下,用户名和电子邮件保存在“Users”节点下 这是将名称和电子邮件保存到数据库的模型类: public class GetUserName { String name,email; public GetUserName(String name, String email)

我成功地在应用程序的布局中加载了每个用户特定的UID。图为:

在注册时,我还将用户的电子邮件和密码保存到“用户”节点下的数据库中。以下是数据库屏幕截图:

可以清楚地看到,所有消息都保存在“MessageTest”节点下,用户名和电子邮件保存在“Users”节点下

这是将名称和电子邮件保存到数据库的模型类:

public class GetUserName {

String name,email;

public GetUserName(String name, String email) {
    this.name = name;
    this.email = email;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}
这是我的聊天模型课:

    public class ChatModel {

    String messages;
   String username;
    public ChatModel() {
    }
    public ChatModel(String messages, String username) {
        this.messages = messages;
        this.username = username;
    }
    public String getMessages() {
        return messages;
    }
    public void setMessages(String messages) {
        this.messages = messages;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
这是当用户键入消息并单击“发送”按钮时执行的代码:

private void postMessages() {
    DatabaseReference database = FirebaseDatabase.getInstance().getReference("MessageTest");
    Log.e("Reference is : ", String.valueOf(databaseReference));
    String actual_msg = editText.getText().toString().trim();
    if (actual_msg.matches("")) {
        new AlertDialog.Builder(ChatActivity.this)
                .setTitle("Failed")
                .setMessage("Enter all fields/check Internet Connection")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                    }
                }).show();
    } else {
        ChatModel chatModel = new ChatModel(actual_msg, mAuth.getUid());
        String id = database.push().getKey();
        database.child(id).setValue(chatModel).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Toast.makeText(ChatActivity.this, "Message Sent Successfully", Toast.LENGTH_SHORT).show();
                    editText.setText("");
                } else {
                    Toast.makeText(ChatActivity.this, "Message Sent Failed !", Toast.LENGTH_SHORT).show();
                }
            }

我尝试了所有方法,但无法用用户名替换UID。

此代码将帮助您从数据库中检索值并将其推送到另一个节点中。但我怀疑Firebase实时数据库中是否有可用的
addOnCompleteListener

DatabaseReference databaseUsers = FirebaseDatabase.getInstance().child("Users").child(mAuth.getUid);
databaseUsers.addValueEventListener(new ValueEventListener() {
    @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String name = dataSnapshot.child("name").getValue(String.class);
            ChatModel chatModel = new ChatModel(actual_msg, name);
            String id = database.push().getKey();
            database.child(id).setValue(chatModel).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(ChatActivity.this, "Message Sent Successfully", Toast.LENGTH_SHORT).show();
                        editText.setText("");
                    } else {
                        Toast.makeText(ChatActivity.this, "Message Sent Failed !", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
});
DatabaseReference-databaseUsers=FirebaseDatabase.getInstance().child(“用户”).child(mAuth.getUid);
databaseUsers.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
String name=dataSnapshot.child(“name”).getValue(String.class);
ChatModel ChatModel=新ChatModel(实际消息,名称);
String id=database.push().getKey();
database.child(id).setValue(chatModel.addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(ChatActivity.this,“消息发送成功”,Toast.LENGTH_SHORT.show();
editText.setText(“”);
}否则{
Toast.makeText(ChatActivity.this,“消息发送失败!”,Toast.LENGTH_SHORT.show();
}
}
});
}
});

@Stratubas补充道,先生check@Rohit您能更准确地解释一下要检索哪个节点吗。@Ashish是的,先生,如上面的屏幕截图所示,当用户发布消息时,您可以看到消息中显示的UID。我只是想用“用户”节点的名称替换发布消息的用户的UID。@Rohit请检查我的回答图例的不同形式,您以动画角色的形式出现;)。非常感谢:)再次感谢,现在我可以继续了
 @Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull ChatModel model) {

    ChatModel model1 = chatModelList.get(position);
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
    holder.messages.setText(model1.getMessages());
    holder.userName.setText(model1.getUsername());

}
DatabaseReference databaseUsers = FirebaseDatabase.getInstance().child("Users").child(mAuth.getUid);
databaseUsers.addValueEventListener(new ValueEventListener() {
    @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String name = dataSnapshot.child("name").getValue(String.class);
            ChatModel chatModel = new ChatModel(actual_msg, name);
            String id = database.push().getKey();
            database.child(id).setValue(chatModel).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(ChatActivity.this, "Message Sent Successfully", Toast.LENGTH_SHORT).show();
                        editText.setText("");
                    } else {
                        Toast.makeText(ChatActivity.this, "Message Sent Failed !", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
});