Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
Java 聊天应用程序&x27;s";“发送”;按钮不工作_Java_Android_Android Studio_Firebase Realtime Database_Chatroom - Fatal编程技术网

Java 聊天应用程序&x27;s";“发送”;按钮不工作

Java 聊天应用程序&x27;s";“发送”;按钮不工作,java,android,android-studio,firebase-realtime-database,chatroom,Java,Android,Android Studio,Firebase Realtime Database,Chatroom,这是我第一次问有关stackoverflow的问题 我要直截了当地说,我目前正在开发一个应用程序,其中包括使用firebase创建聊天室,我发现了这个 并决定跟随他。在我完成代码并尝试运行之前,一切都进展顺利。除了“发送”按钮之外,所有功能都按预期运行,该按钮本应在聊天室中显示我的消息。我的发送按钮没有响应,即使我点击它。我似乎找不到问题所在 以下是我的聊天室代码: public class Chat_Room extends AppCompatActivity { private

这是我第一次问有关stackoverflow的问题

我要直截了当地说,我目前正在开发一个应用程序,其中包括使用firebase创建聊天室,我发现了这个

并决定跟随他。在我完成代码并尝试运行之前,一切都进展顺利。除了“发送”按钮之外,所有功能都按预期运行,该按钮本应在聊天室中显示我的消息。我的发送按钮没有响应,即使我点击它。我似乎找不到问题所在

以下是我的聊天室代码:

public class Chat_Room extends AppCompatActivity {

    private Button btn_send_msg;
    private EditText input_msg;
    private TextView chat_conversation;

    private String user_name, room_name;
    private DatabaseReference root;
    private String temp_key;

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

        btn_send_msg = (Button) findViewById(R.id.btn_send);
        input_msg = (EditText) findViewById(R.id.msg_input);
        chat_conversation = (TextView) findViewById(R.id.textview);

        user_name = getIntent().getExtras().get("user_name").toString();
        room_name = getIntent().getExtras().get("room_name").toString();
        setTitle(" Room - "+room_name);

        root = FirebaseDatabase.getInstance().getReference().child(room_name);

        btn_send_msg.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {

                Map<String,Object> map = new HashMap<String, Object>();
                temp_key = root.push().getKey();
                root.updateChildren(map);

                DatabaseReference message_root = root.child(temp_key);
                Map<String, Object> map2 = new  HashMap<String, Object>();
                map2.put("name",user_name);
                map2.put("msg",input_msg.getText().toString());

                //message_root.updateChildren(map2);
                message_root.setValue(map2);

            }
        });

        root.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            append_chat_conversation(dataSnapshot);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                append_chat_conversation(dataSnapshot);
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private String chat_msg, chat_user_name;

    private void append_chat_conversation(DataSnapshot dataSnapshot){

        Iterator i = dataSnapshot.getChildren().iterator();

        while (i.hasNext()){
            chat_msg = (String) ((DataSnapshot)i.next()).getValue();
            chat_user_name = (String) ((DataSnapshot)i.next()).getValue();

            chat_conversation.append(chat_user_name +" : "+chat_msg+"\n");
        }
    }
}
公共类聊天室扩展应用程序活动{
私人按钮btn\u发送消息;
私人编辑文本输入信息;
私人文本查看聊天室会话;
私有字符串用户名、房间名称;
私有数据库引用根;
私有字符串临时密钥;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局聊天室);
btn_send_msg=(按钮)findviewbyd(R.id.btn_send);
input_msg=(EditText)findViewById(R.id.msg_input);
chat_conversation=(TextView)findViewById(R.id.TextView);
user_name=getIntent().getExtras().get(“user_name”).toString();
房间名称=getIntent().getExtras().get(“房间名称”).toString();
设置标题(“房间-”+房间名称);
root=FirebaseDatabase.getInstance().getReference().child(文件室名称);
btn_send_msg.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Map Map=newhashmap();
temp_key=root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root=root.child(临时密钥);
Map map2=新的HashMap();
map2.put(“名称”,用户名);
put(“msg”,input_msg.getText().toString());
//message_root.updateChildren(map2);
消息_root.setValue(map2);
}
});
root.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
追加聊天对话(dataSnapshot);
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
追加聊天对话(dataSnapshot);
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
私有字符串chat\u msg,chat\u用户名;
私有void追加会话(DataSnapshot DataSnapshot){
迭代器i=dataSnapshot.getChildren().Iterator();
while(i.hasNext()){
chat_msg=(String)((DataSnapshot)i.next()).getValue();
chat_user_name=(字符串)((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_用户名+”:“+chat_msg+”\n”);
}
}
}
如果我做错了什么或者提供的信息不够,请告诉我,非常感谢您的帮助,因为我仍然是android studio和firebase的新手。提前感谢。

欢迎来到stack!!:)

仅更新更新数据,如果数据库中没有要更新的数据,则不会发生任何事情。
您的第一次更新将不起任何作用

Map<String,Object> map = new HashMap<String, Object>();
            temp_key = root.push().getKey();
            root.updateChildren(map);
而不是更新消息根。改为设置值。您必须设置该值,因为消息_根不存在,如果有意义,则通过调用设置值来设置其存在

[编辑]

尝试确认至少可以将某些内容发布到数据库中。 在oncreate方法中,创建一个映射并将该映射推送到数据库

如果没有任何反映,我只能假设发生了两件事中的一件。您错误地设置了Firebase(您是否添加了google services json),或者您的安全规则设置为仅来自经过身份验证的用户的大量写入。请确保您的安全规则处于打开状态。我认为安全规则是最可能的原因

转到Firebase控制台。转到数据库并单击规则。确保你的规则是这样的

{ "rules": { ".read": true, ".write": true } } { “规则”:{ “.read”:正确, “.write”:正确 } } 复制并复制这些规则并直接发布。

欢迎使用stack!!:)

仅更新更新数据,如果数据库中没有要更新的数据,则不会发生任何事情。
您的第一次更新将不起任何作用

Map<String,Object> map = new HashMap<String, Object>();
            temp_key = root.push().getKey();
            root.updateChildren(map);
而不是更新消息根。改为设置值。您必须设置该值,因为消息_根不存在,如果有意义,则通过调用设置值来设置其存在

[编辑]

尝试确认至少可以将某些内容发布到数据库中。 在oncreate方法中,创建一个映射并将该映射推送到数据库

如果没有任何反映,我只能假设发生了两件事中的一件。您错误地设置了Firebase(您是否添加了google services json),或者您的安全规则设置为仅来自经过身份验证的用户的大量写入。请确保您的安全规则处于打开状态。我认为安全规则是最可能的原因

转到Firebase控制台。转到数据库并单击规则。确保你的规则是这样的

{ "rules": { ".read": true, ".write": true } } { “规则”:{ “.read”:正确, “.write”:正确 } }
复制并复制这些规则,然后直接发布。

还是一样的问题:(更新后,我只按照您的建议将updateChildren更改为setValue。一秒钟后,我会和您在一起:)当您按下按钮时,您的数据库会更新吗。