gpt4 book ai didi

android - Firebase dataSnapshot 未转换为自定义 Java 对象

转载 作者:行者123 更新时间:2023-11-29 19:22:41 25 4
gpt4 key购买 nike

我在尝试将从 Firebase 数据库检索的 JSON 数据映射到项目中的自定义 Java 类时遇到问题。我正在尝试检索 Restaurants 节点下的所有子节点。

餐厅节点的 Firebase 数据结构:

"Restaurants" : {
"ZyZnmC3xC39Jv1oVVdXbQdyCOcTQ" : {
"restaurantContactNo" : "222922943",
"restaurantImgUrl" : "https://firebasestorage.googleapis.com/...",
"restaurantWebsite" : "www.bubbleme.com",
"restaurant_address" : "40/1/1",
"restaurant_category" : "coffee",
"restaurant_latitude" : "6.983489f",
"restaurant_longitude" : "79.932736f",
"restaurant_name" : "Bubble Me Bubble Tea",
"restaurant_rating" : 4.5
}

以下是我尝试从检索到的数据中创建对象的方式:

mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Restaurants");
mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

if(dataSnapshot.exists()){

for(DataSnapshot data : dataSnapshot.getChildren()) {

Restaurants res = data.getValue(Restaurants.class);


......

但是 res 始终为 null,我将数据快照打印到控制台,数据都以 JSON 格式存在:

{ZyZnmC3xC39Jv1oVVdXbQdyCOcTQ={restaurant_rating=4.5, restaurant_longitude=79.932736f, restaurant_category=coffee, restaurantContactNo=0112922943, restaurant_address=40/1/1, restaurantImgUrl=https://firebasestorage.googleapis.com/.., restaurant_name=Bubble Me Bubble Tea, restaurant_latitude=6.983489f, restaurantWebsite=www.bubbleme.com}}

餐馆 Java 类:

public class Restaurants {

private String restaurant_longitude;
private String restaurant_latitude;
private String restaurant_name;
private String restaurant_address;
private String restaurantImgUrl;
private String restaurant_category;
private String restaurant_rating;
private String restaurantContactNo;
private String restaurantWebsite;

public Restaurants(){}


public Restaurants(String restaurant_rating, String restaurant_longitude, String restaurant_category, String restaurantContactNo,
String restaurant_address, String restaurantImgUrl, String restaurant_name, String restaurant_latitude, String restaurantWebsite) {

this.restaurant_rating = restaurant_rating;
this.restaurant_longitude = restaurant_longitude;
this.restaurant_category = restaurant_category;
this.restaurantContactNo = restaurantContactNo;
this.restaurant_address = restaurant_address;
this.restaurantImgUrl = restaurantImgUrl;
this.restaurant_name = restaurant_name;
this.restaurant_latitude = restaurant_latitude;
this.restaurantWebsite = restaurantWebsite;

}

public String getRestaurantWebsite() {
return restaurantWebsite;
}

public String getRestaurantContactNo() {
return restaurantContactNo;
}

public String getRestaurantRating() {
return restaurant_rating;
}

public String getRestaurantCategory() {
return restaurant_category;
}

public String getRestaurantImgUrl() {
return restaurantImgUrl;
}

public String getRestaurantAddress() {
return restaurant_address;
}

public String getRestaurantTitle() {
return restaurant_name;
}

public String getRestaurantLatitude() {
return restaurant_latitude;
}

public String getRestaurantLongitude() {
return restaurant_longitude;
}

}

我已经尝试过多次使用 ValueEventListnerChildValueEventListnerListnerForSingleChild 但我就是无法让它工作,我知道我非常接近,因为数据快照检索数据,但我认为将数据映射到 Restaurants 对象是问题所在。

有关此的任何帮助都会有所帮助。

----问题已解决----

我最终解决了这个问题,方法是删除我的 Restaurants Java 类并使用所需的成员重新实现该类。奇怪的是,新类(class)与上一类(class)完全相同,但不知何故它起作用了。可能是因为我的旧类(class)在我将 Firebase 集成到我的项目之前已经实现了很长时间,所以我想不出它如何工作的合理原因。

特别感谢 Doug、Lewis 和 Rosário 提供的宝贵反馈。

最佳答案

正如您在评论中提到的,ProGuard 已启用,这可能是问题的原因。

参见 guidance here on configuring ProGuard ,建议将规则添加到 proguard-rules.pro:

# Add this global rule
-keepattributes Signature

# This rule will properly ProGuard all the model classes in
# the package com.yourcompany.models. Modify to fit the structure
# of your app.
-keepclassmembers class com.yourcompany.models.** {
*;
}

将 Firebase 的所有 Java 模型类放入一个包中,并更改 keepclassmembers 规则以匹配您的应用。本质上,因为您没有在代码中调用这些字段,ProGuard 可以假设它们可以被删除,所以当 Firebase 尝试使用它们时会失败。

关于android - Firebase dataSnapshot 未转换为自定义 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42062333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com