Im using 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;
}
}
当您调用requestSnapshot.getValue(requestList.class)
时,您将从数据库中获取 JSON 值并将其转换为requestList
对象。关键不是其中的一部分。
但是,您可以轻松地调用requestSnapshot.getKey()
以获取每个快照的密钥。
如果要同时保留键和值,则可能值得简单地保留DataSnapshot
,因为它包含两者。
我赞成上面的答案,因为我不能不输入它,但是这是有效的答案
我更改了我的 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());
}
}
和请求列表类
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;
}
}