Firebase数据库读取问题

时间:2019-04-30 15:09:44

标签: java android firebase-realtime-database

This is what i want to get我正在尝试从Firebase Datasebase的最后一个节点获取价值

我看到了一些解决方案,但没有一个对我有用。

代码如下:

            setData = FirebaseDatabase.getInstance().getReference().child("Questions");

            Query lastQuery = setData.orderByKey().limitToLast(1);
            lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    if (dataSnapshot.hasChild("JSON_OBJ")) {
                        SubmitKey item = dataSnapshot.getValue(SubmitKey.class);
                        String key2 = item.getJSON_OBJ();

                    } else {
                        Snackbar.make(findViewById(R.id.QuestionLayout), "JSON_ObJ not found", Snackbar.LENGTH_LONG).show();
                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

我的构造函数类

public class SubmitKey {

    private String JSON_OBJ;

    public SubmitKey() {
    }

    public SubmitKey(String JSON_OBJ) {
        this.JSON_OBJ = JSON_OBJ;
    }

    public String getJSON_OBJ() {
        return JSON_OBJ;
    }
}

不是获取值,而是转到else语句并显示“找不到JSON_OBJ”。

任何帮助将不胜感激。

编辑:我对代码进行了一些更改,现在显示no setter/field found for 0-101 found on class submitKey D/ViewRootImpl@5b51511[Questions]: ViewPostIme pointer 0 D/ViewRootImpl@5b51511[Questions]: ViewPostIme pointer 1

如果语句转到else语句,也不会进入内部

1 个答案:

答案 0 :(得分:1)

对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您的onDataChange将需要遍历snapshot.getChildren()来处理此列表:

lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
      for (DataSnapshot dataSnapshot: snapshot.getChildren()) {
        if (dataSnapshot.hasChild("JSON_OBJ")) {
            SubmitKey item = dataSnapshot.getValue(SubmitKey.class);
            String key2 = item.getJSON_OBJ();

        } else {
            Snackbar.make(findViewById(R.id.QuestionLayout), "JSON_ObJ not found", Snackbar.LENGTH_LONG).show();
        }
      }
    }