Android-Firebase-无法将类型java.util.HashMap的值转换为String

员工123:

目标

在群聊节点中保存数据

当前数据库树

在此处输入图片说明

在“群聊”节点中,将发送用户的消息并将其存储在用户选择的群聊中。

如数据库树中所示,用户已发送一条消息,说“ Hello”,并且从“用户”节点中检索了他的名字。

所需的数据库树

在此处输入图片说明

所述--- MSG ID ---自动生成

所述---用户ID ---从用户节点retreived

问题

该功能允许用户发送消息,只有一次得手这是一次。在部署应用程序的以下时间中,用户登录后崩溃。

错误-Logcat

com.google.firebase.database.DatabaseException:无法将类型java.util.HashMap的值转换为String

ChatActivity类-发送聊天消息功能

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

        jGroupChatName = getIntent().getExtras().get("groupChatName").toString();
        jUserName = getIntent().getExtras().get("groupUserName").toString();
        jUserNeighbourhood = getIntent().getExtras().get("groupUserHome").toString();

        jChatToolbar = (Toolbar) findViewById(R.id.allUSersToolBar);

        jFirebaseCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

        /*UserID Start - I was trying to retrieve the current user ID and add it to the Group Chat node, 
          under the selected Group Chat */
        assert jFirebaseCurrentUser != null;
        final String currentUserID = jFirebaseCurrentUser.getUid();
        jChatRoot = FirebaseDatabase.getInstance().getReference().child("Group Chats").child(jGroupChatName).child(currentUserID);
        /*UserID End*/

        jChatMessageText = (EditText) findViewById(R.id.chatMessageText);
        jChatSendTextBtn = (ImageButton) findViewById(R.id.chatSendTextBtn);

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

                Map<String, Object> groupMap = new HashMap<String, Object>();
                jGroupKey = jChatRoot.push().getKey();
                jChatRoot.updateChildren(groupMap);

                // Based on the UserID code at the top, the "currentUserID" is added as shown below
                // My intentions are to have the UserID saved under the name of the Group Chat
                // jGroupKey = (Name of selected Group Chat)

                DatabaseReference groupMessageRoot = jChatRoot.child(jGroupKey).child(currentUserID);
                Map<String, Object> groupMap2 = new HashMap<String, Object>();
                groupMap2.put("name", jUserName);
                groupMap2.put("msg", jChatMessageText.getText().toString());

                groupMessageRoot.updateChildren(groupMap2);
            }
        });
    }

关联问题

Android-Firebase-将用户发送到聊天室

未来的实施

将来,我打算允许用户通过编写代码来发送图片和视频记录,以允许用户访问其电话摄像头或画廊并将图片和vids数据发送到选定的“群组”名称下的“群组聊天”节点中。我也想在发送后检索数据,但是,如果无法解决这些问题,我当然会将它们留在以后。

穆罕默德:

不需要分支所需的数据库。您正在使用用户的UID创建不必要的级别。相反,将这一层向下合并,即,将uid,消息和名称合并。然后someRef.orderByKey("uid").equalTo("<user_uid>"),如果您需要该路径内的特定用户记录(例如聊天消息),则可以使用。

因此,创建一个名为ChatMessage

public class ChatMessage {

    private String uid;
    private String name;
    private String message;
    private Long creationTime;

    public ChatMessage() {
        // Default constructor required for calls to DataSnapshot.getValue(ChatMessage.class)
    }

    public ChatMessage(String uid, String name, String message) {
        this.uid = uid;
        this.name = name;
        this.message = message;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public java.util.Map<String, String> getCreationTime() {
        return ServerValue.TIMESTAMP;
    }

    @Exclude
    public Long getCreationTimeLong() {
        return creationTime;
    }

    public void setCreationTime(Long creationTime) {
        this.creationTime = creationTime;
    }
}

然后,如下更新代码:

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

    chatGroupName = getIntent().getStringExtra(CHAT_GROUP_NAME);
    userKey = getIntent().getStringExtra(USER_KEY);
    user = getIntent().getParcelableExtra(USER);

    jChatToolbar = (Toolbar) findViewById(R.id.allUSersToolBar);
    jChatMessageText = (EditText) findViewById(R.id.chatMessageText);
    jChatSendTextBtn = (ImageButton) findViewById(R.id.chatSendTextBtn);

    jChatSendTextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            sendMessage();
        }
    });
}

private void sendMessage() {
    String userMessage = jChatMessageText.getText().toString();
    chatGroupRef = FirebaseDatabase.getInstance().getReference().child("Group Chats").child(chatGroupName);

    if (!TextUtils.isEmpty(userMessage)) {
        String newChatMessageKey = chatGroupRef.push().getKey();
        ChatMessage newChatMessage = new ChatMessage(userKey, user.getName(), userMessage);
        chatGroupRef.child(newChatMessageKey).setValue(newChatMessage);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Firebase DatabaseException:无法将类型java.lang.Long的值转换为String

无法将类型为java.lang.String的对象转换为类型android.net.Uri来获取对象的值

将java.util.Properties转换为HashMap <String,String>

Firebase DatabaseException无法将类型java.lang.Long的值转换为String

无法反序列化对象。无法将类型java.util.Date的值转换为String

无法将类型java.util.HashMap的值转换为String

无法将类型java.util.HashMap的值转换为String。将字符串转换为地图

如何从java.util.HashMap转换为android.content.ContentValues?

Android MultiSelectListPreference,java.lang.String无法强制转换为java.util.Set

Firestore无法反序列化对象。无法将类型java.util.HashMap的值转换为Date

firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String

Android Firebase无法将类型java.util.HashMap的值转换为String

Firebase:无法将类型java.lang.Boolean的值转换为String

使用Firebase RecyclerAdapter时,“无法将java.lang.String类型的对象转换为com.android.projectrc.Listing类型”

java.util.HashMap无法转换为com.google.android.gms.maps.model.LatLng

将时间戳(firebase)转换为Date util时出错

Android java.util.hashmap无法转换为java.util.list

无法将类型“ java.util.ArrayList”的属性值转换为所需的类型“ javax.xml.ws.handler.HandlerResolver”

Android HashMap java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.util.Map $ Entry

Firebase“无法将类型为java.util.HashMap的值转换为int”

Thymeleaf和SpringBoot-无法将类型[java.lang.String]的属性值转换为必需的类型[java.util.Date]作为prope

无法将java.util.HashMap强制转换为java.util.ArrayList

无法将 java.util.HashMap 类型的值转换为 String 但代码中没有 hashmap?

无法将 java.util.Date 类型的值转换为 String

如何获取这个firebase结构中的数据?错误:无法将 java.util.ArrayList 类型的对象转换为 QuotationOrder 类型的模型

无法将 java.lang.String[] 类型的属性值转换为所需的类型 java.util.List

Firebase DatabaseException:无法将 java.util.ArrayList 类型的对象转换为我的类型 Object

java.util.HashMap 无法转换(android studio、firebase、java)

“无法将 'java.lang.String' 类型的值转换为所需的 'java.util.List'。” 或者如何将 Python 列表转换为 Java.util 列表?