【问题标题】:FirebaseListAdapter Access to keyFirebaseListAdapter 访问密钥
【发布时间】:2016-06-12 20:10:19
【问题描述】:

我正在使用 Google Firebase 和 FirebaseUI

我像这样将值列表传递给 FirebaseListAdapter

 ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot requestSnapshot: snapshot.getChildren()) {
                requestList request = requestSnapshot.getValue(requestList.class);
                Log.i("Chat", request.getTitle()+": "+request.getDescription()+"    "+request.getKey());
            }

我想将记录的索引(键)与其中的信息一起存储。但是,如果字段名称相同,则会自动映射它们自己,这让我无法解决。

我尝试通过名称“key”调用 requestList 类中的“key”方法的属性,但这没有奏效

返回的数据结构是这样的

    Key:{
    "RequestTitle":"Value",
    "RequestDescription":"description",
    "RequestItems":{ item 1 item 2}
}

请求类如下所示

public class requestList {

    String RequestTitle;
    String RequestDescription;
    String key;

    public requestList() {
    }

    public requestList(String RequestTitle, String RequestDescription, String key) {
        this.RequestTitle = RequestTitle;
        this.RequestDescription = RequestDescription;
        this.key = key;
    }

    public String getTitle() {
        return RequestTitle;
    }

    public String getKey() {
        return key;
    }

    public String getDescription() {
        return RequestDescription;
    }
}

【问题讨论】:

    标签: android firebase firebase-realtime-database firebaseui


    【解决方案1】:

    当您调用 requestSnapshot.getValue(requestList.class) 时,您将从数据库中获取 JSON 并将其转换为 requestList 对象。 key 不是其中的一部分。

    但是,您可以轻松调用requestSnapshot.getKey() 来获取每个快照的密钥。

    如果您想同时保留键和值,可能值得简单地保留 DataSnapshot,因为它包含两者。

    【讨论】:

    • 我能否将密钥传递给 requestList,然后所有内容都存储在同一个类 /instance 中?
    • 它已经全部存储在一个类中:DataSnapshot。当然,您也可以将所有内容传递给requestList,但您必须自己注入密钥。 DataSnapshot.getValue() 不会为你这样做。
    • +Frank van Puddelen,感谢您在这方面的帮助。我将尝试将 requestSnapshot 传递给 requestList 类并手动实现变量的设置
    • 我无法弄清楚这一点。如果我将 requestList 类更改为接受 DataSnapshot 而不是字符串,则该对象始终为空。如何将 dataSnapshot 传递给 requestList 类?
    • 您能解释一下如何正确传递 DataSnaphot。由于某种原因,requestKey 的设置不会保留在 onDataChange 方法之外。
    【解决方案2】:

    我赞成上面的答案,因为我不能不输入,但是这是有效的答案

    我更改了我的 requestList 类以包含一个 setKey 方法,然后从 onDataChange 方法中调用它。不确定它是否正确,但它确实解决了问题

        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot requestSnapshot: snapshot.getChildren()) {
                //requestList request = requestSnapshot.getValue(requestList.class);
                requestList request = requestSnapshot.getValue(requestList.class);
                request.setKey(requestSnapshot.getKey());
                Log.i("Chat", request.getTitle()+": "+request.getDescription()+"    "+request.getKey());
            }
        }
    

    和 requestList 类

    public class requestList {
    
        String RequestTitle;
        String RequestDescription;
        String key;
    
        DataSnapshot requestSnapshot;
    
    
        public requestList() {
        }
    
        public requestList(DataSnapshot requestSnapshot) {
            //this.RequestTitle = RequestTitle;
            //this.RequestDescription = RequestDescription;
            //this.key = key;
    
            this.requestSnapshot = requestSnapshot;
        }
    
        public String getTitle() {
            return RequestTitle;
        }
    
        public String getKey() {
            return key;
        }
    
        public String getDescription() {
            return RequestDescription;
        }
    
    
        public void setKey(String key) {
            this.key = key;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2017-03-23
      • 2014-09-12
      • 2021-12-25
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      相关资源
      最近更新 更多