为什么我不能使用Model类在数据库中设置特定子项的值?

时间:2018-03-08 15:30:15

标签: android firebase firebase-realtime-database

这是消息模型类

allTestCoverageFile

我正在尝试使用setter方法

更新消息密钥的特定值(Last值)

这是我的代码

public class MessModel {
    String message;
    public MessModel() {}

    public MessModel(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

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

我不知道为什么setter方法不起作用? 什么是所有孩子的setValue的最佳方式?或具体的setValue?

2 个答案:

答案 0 :(得分:2)

要解决此问题,请使用以下代码:

Query lastmess = FirebaseDatabase.getInstance().getReference("Messages").child(my_Id).child(sendUID);
lastmess.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataa) {
        for (DataSnapshot snap : dataa.getChildren()) {
            MessModel messages = snap.getValue(MessModel.class);
            String mes = messages.getMessage(); //here I can get the last message
            messages.setMessage("updated Message");
            snap.getRef().setValue(messages);
        }
    }

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

使用String类可以更简单地完成:

Query lastmess = FirebaseDatabase.getInstance().getReference("Messages").child(my_Id).child(sendUID);
lastmess.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataa) {
        for (DataSnapshot snap : dataa.getChildren()) {
            snap.child("message").getRef().setValue(updated Message);
        }
    }

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

答案 1 :(得分:0)

用以下代码替换该setMessage调用:

mDatabase.child("theChildYouWantToSetTheValueFor").setValue("updated Message");