com.google.firebase.database.DatabaseException:Can';t将java.util.ArrayList类型的对象转换为
我收到一个Firebase DatabaseException“无法将java.util.ArrayList类型的对象转换为com.example.FirebasedEleme.Title类型” 当我单击该流程时,应用程序崩溃并显示错误。是否知道错误以及如何修复错误com.google.firebase.database.DatabaseException:Can';t将java.util.ArrayList类型的对象转换为,java,android,arrays,firebase,firebase-realtime-database,Java,Android,Arrays,Firebase,Firebase Realtime Database,我收到一个Firebase DatabaseException“无法将java.util.ArrayList类型的对象转换为com.example.FirebasedEleme.Title类型” 当我单击该流程时,应用程序崩溃并显示错误。是否知道错误以及如何修复错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.ashina.hotelsclient, PID: 15925 com.google.firebase.dat
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ashina.hotelsclient, PID: 15925
com.google.firebase.database.DatabaseException: Can't convert object of type java.util.ArrayList to type com.ashina.hotelsclient.Model.FoodModel
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.ashina.hotelsclient.HomeActivity$4$1.onDataChange(HomeActivity.java:276)
at com.google.firebase.database.Query$1.onDataChange(Query.java:179)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
这是我的家庭活动.java
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onPopularItemClick(PopularCategoryClick event)
{
if (event.getPopularCategoryModel() != null)
{
dialog.show();
FirebaseDatabase.getInstance()
.getReference("Category")
.child(event.getPopularCategoryModel().getMenu_id())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
Common.categorySelected = dataSnapshot.getValue(CategoryModel.class);
//load food
FirebaseDatabase.getInstance()
.getReference("Category")
.child(event.getPopularCategoryModel().getMenu_id())
.child("foods")
.orderByChild("id")
.equalTo(event.getPopularCategoryModel().getFood_id())
.limitToLast(1)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
if (dataSnapshot.exists())
{
for (DataSnapshot itemSnapShot:dataSnapshot.getChildren())
{
Common.selectedFood = itemSnapShot.getValue(FoodModel.class);
}
navController.navigate(R.id.nav_food_detail);
}
else
{
Toast.makeText(HomeActivity.this, "Item doesn't exists", Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
dialog.dismiss();
Toast.makeText(HomeActivity.this, ""+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
else
{
dialog.dismiss();
Toast.makeText(HomeActivity.this, "Item doesn't exists!", Toast.LENGTH_SHORT).show();
}
}
public class Common {
public static final String USER_REFERENCES = "Users";
public static final String POPULAR_CATEGORY_REF = "MostPopular" ;
public static final String BEST_DEALS_REF = "BestDeals";
public static final int DEFAULT_COLUMN_COUNT = 0;
public static final int FULL_WIDTH_COLUMN = 1;
public static final String CATEGORY_REF = "Category";
public static final String COMMENT_REF = "Comments";
public static UserModel currentUser;
public static CategoryModel categorySelected;
public static FoodModel selectedFood;
public static String formatPrice(double price) {
if (price != 0)
{
DecimalFormat df = new DecimalFormat("#,##0.00");
df.setRoundingMode(RoundingMode.UP);
String finalPrice = new StringBuilder(df.format(price)).toString();
return finalPrice.replace(".",",");
}
else
return "0,00";
}
public static Double calculateExtraPrice(SizeModel userSelectedSize, List<AddonModel> userSelectedAddon) {
Double result = 0.0;
if (userSelectedSize == null && userSelectedAddon == null)
return 0.0;
else if (userSelectedSize == null)
{
//if user selected addon != null we need sum price
for(AddonModel addonModel : userSelectedAddon)
result+=addonModel.getPrice();
return result;
}
else if (userSelectedAddon == null)
{
return userSelectedSize.getPrice()*1.0;
}
else
{
//if both size and addon is selected
result = userSelectedSize.getPrice()*1.0;
for(AddonModel addonModel : userSelectedAddon)
result+=addonModel.getPrice();
return result;
}
}
public static void setSpanString(String welcome, String name, TextView textView) {
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(welcome);
SpannableString spannableString = new SpannableString(name);
StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(boldSpan,0,name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(spannableString);
textView.setText(builder,TextView.BufferType.SPANNABLE);
}
}
public class FoodModel {
private String key;
private String name,image,id,description;
private Long price;
private List<AddonModel> addon;
private List<SizeModel> size;
private Double ratingValue;
private Long ratingCount;
//for cart
private List<AddonModel> userSelectedAddon;
private SizeModel userSelectedSize;
public FoodModel() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
public List<AddonModel> getAddon() {
return addon;
}
public void setAddon(List<AddonModel> addon) {
this.addon = addon;
}
public List<SizeModel> getSize() {
return size;
}
public void setSize(List<SizeModel> size) {
this.size = size;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Double getRatingValue() {
return ratingValue;
}
public void setRatingValue(Double ratingValue) {
this.ratingValue = ratingValue;
}
public Long getRatingCount() {
return ratingCount;
}
public void setRatingCount(Long ratingCount) {
this.ratingCount = ratingCount;
}
public List<AddonModel> getUserSelectedAddon() {
return userSelectedAddon;
}
public void setUserSelectedAddon(List<AddonModel> userSelectedAddon) {
this.userSelectedAddon = userSelectedAddon;
}
public SizeModel getUserSelectedSize() {
return userSelectedSize;
}
public void setUserSelectedSize(SizeModel userSelectedSize) {
this.userSelectedSize = userSelectedSize;
}
}
common.java
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onPopularItemClick(PopularCategoryClick event)
{
if (event.getPopularCategoryModel() != null)
{
dialog.show();
FirebaseDatabase.getInstance()
.getReference("Category")
.child(event.getPopularCategoryModel().getMenu_id())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
Common.categorySelected = dataSnapshot.getValue(CategoryModel.class);
//load food
FirebaseDatabase.getInstance()
.getReference("Category")
.child(event.getPopularCategoryModel().getMenu_id())
.child("foods")
.orderByChild("id")
.equalTo(event.getPopularCategoryModel().getFood_id())
.limitToLast(1)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
if (dataSnapshot.exists())
{
for (DataSnapshot itemSnapShot:dataSnapshot.getChildren())
{
Common.selectedFood = itemSnapShot.getValue(FoodModel.class);
}
navController.navigate(R.id.nav_food_detail);
}
else
{
Toast.makeText(HomeActivity.this, "Item doesn't exists", Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
dialog.dismiss();
Toast.makeText(HomeActivity.this, ""+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
else
{
dialog.dismiss();
Toast.makeText(HomeActivity.this, "Item doesn't exists!", Toast.LENGTH_SHORT).show();
}
}
public class Common {
public static final String USER_REFERENCES = "Users";
public static final String POPULAR_CATEGORY_REF = "MostPopular" ;
public static final String BEST_DEALS_REF = "BestDeals";
public static final int DEFAULT_COLUMN_COUNT = 0;
public static final int FULL_WIDTH_COLUMN = 1;
public static final String CATEGORY_REF = "Category";
public static final String COMMENT_REF = "Comments";
public static UserModel currentUser;
public static CategoryModel categorySelected;
public static FoodModel selectedFood;
public static String formatPrice(double price) {
if (price != 0)
{
DecimalFormat df = new DecimalFormat("#,##0.00");
df.setRoundingMode(RoundingMode.UP);
String finalPrice = new StringBuilder(df.format(price)).toString();
return finalPrice.replace(".",",");
}
else
return "0,00";
}
public static Double calculateExtraPrice(SizeModel userSelectedSize, List<AddonModel> userSelectedAddon) {
Double result = 0.0;
if (userSelectedSize == null && userSelectedAddon == null)
return 0.0;
else if (userSelectedSize == null)
{
//if user selected addon != null we need sum price
for(AddonModel addonModel : userSelectedAddon)
result+=addonModel.getPrice();
return result;
}
else if (userSelectedAddon == null)
{
return userSelectedSize.getPrice()*1.0;
}
else
{
//if both size and addon is selected
result = userSelectedSize.getPrice()*1.0;
for(AddonModel addonModel : userSelectedAddon)
result+=addonModel.getPrice();
return result;
}
}
public static void setSpanString(String welcome, String name, TextView textView) {
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(welcome);
SpannableString spannableString = new SpannableString(name);
StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(boldSpan,0,name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(spannableString);
textView.setText(builder,TextView.BufferType.SPANNABLE);
}
}
public class FoodModel {
private String key;
private String name,image,id,description;
private Long price;
private List<AddonModel> addon;
private List<SizeModel> size;
private Double ratingValue;
private Long ratingCount;
//for cart
private List<AddonModel> userSelectedAddon;
private SizeModel userSelectedSize;
public FoodModel() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
public List<AddonModel> getAddon() {
return addon;
}
public void setAddon(List<AddonModel> addon) {
this.addon = addon;
}
public List<SizeModel> getSize() {
return size;
}
public void setSize(List<SizeModel> size) {
this.size = size;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Double getRatingValue() {
return ratingValue;
}
public void setRatingValue(Double ratingValue) {
this.ratingValue = ratingValue;
}
public Long getRatingCount() {
return ratingCount;
}
public void setRatingCount(Long ratingCount) {
this.ratingCount = ratingCount;
}
public List<AddonModel> getUserSelectedAddon() {
return userSelectedAddon;
}
public void setUserSelectedAddon(List<AddonModel> userSelectedAddon) {
this.userSelectedAddon = userSelectedAddon;
}
public SizeModel getUserSelectedSize() {
return userSelectedSize;
}
public void setUserSelectedSize(SizeModel userSelectedSize) {
this.userSelectedSize = userSelectedSize;
}
}
公共类公共类{
公共静态最终字符串USER\u REFERENCES=“Users”;
公共静态最终字符串POPULAR\u CATEGORY\u REF=“MostPopular”;
公共静态最终字符串BEST\u DEALS\u REF=“BestDeals”;
公共静态final int DEFAULT_COLUMN_COUNT=0;
公共静态最终整型整列宽度=1;
公共静态最终字符串CATEGORY\u REF=“CATEGORY”;
公共静态最终字符串注释\u REF=“Comments”;
公共静态用户模型currentUser;
已选择公共静态类别模型类别;
公共静态食品模型选择食品;
公共静态字符串格式价格(双倍价格){
如果(价格!=0)
{
DecimalFormat df=新的DecimalFormat(“#,##0.00”);
df.setRoundingMode(RoundingMode.UP);
String finalPrice=newstringbuilder(df.format(price)).toString();
返回最终价格。替换(“.”,“,”);
}
其他的
返回“0,00”;
}
公共静态双计算额外价格(SizeModel userSelectedSize,List UserSelectedAddress){
双结果=0.0;
if(userSelectedSize==null&&userselectedddon==null)
返回0.0;
else if(userSelectedSize==null)
{
//如果用户选择的插件!=null,我们需要总价
for(AddonModel AddonModel:userSelectedAddon)
结果+=addonModel.getPrice();
返回结果;
}
else if(UserSelectedAddress==null)
{
返回userSelectedSize.getPrice()*1.0;
}
其他的
{
//如果同时选择了大小和加载项
结果=userSelectedSize.getPrice()*1.0;
for(AddonModel AddonModel:userSelectedAddon)
结果+=addonModel.getPrice();
返回结果;
}
}
公共静态void setPanString(字符串欢迎、字符串名称、TextView TextView){
SpannableStringBuilder=新的SpannableStringBuilder();
附加(欢迎);
SpannableString SpannableString=新的SpannableString(名称);
StyleSpan boldSpan=新的StyleSpan(Typeface.BOLD);
spannableString.setSpan(粗体SPAN,0,name.length(),SPAN.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(spannableString);
setText(生成器,textView.BufferType.Spanable);
}
}
foodmodel.java
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onPopularItemClick(PopularCategoryClick event)
{
if (event.getPopularCategoryModel() != null)
{
dialog.show();
FirebaseDatabase.getInstance()
.getReference("Category")
.child(event.getPopularCategoryModel().getMenu_id())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
Common.categorySelected = dataSnapshot.getValue(CategoryModel.class);
//load food
FirebaseDatabase.getInstance()
.getReference("Category")
.child(event.getPopularCategoryModel().getMenu_id())
.child("foods")
.orderByChild("id")
.equalTo(event.getPopularCategoryModel().getFood_id())
.limitToLast(1)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
if (dataSnapshot.exists())
{
for (DataSnapshot itemSnapShot:dataSnapshot.getChildren())
{
Common.selectedFood = itemSnapShot.getValue(FoodModel.class);
}
navController.navigate(R.id.nav_food_detail);
}
else
{
Toast.makeText(HomeActivity.this, "Item doesn't exists", Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
dialog.dismiss();
Toast.makeText(HomeActivity.this, ""+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
else
{
dialog.dismiss();
Toast.makeText(HomeActivity.this, "Item doesn't exists!", Toast.LENGTH_SHORT).show();
}
}
public class Common {
public static final String USER_REFERENCES = "Users";
public static final String POPULAR_CATEGORY_REF = "MostPopular" ;
public static final String BEST_DEALS_REF = "BestDeals";
public static final int DEFAULT_COLUMN_COUNT = 0;
public static final int FULL_WIDTH_COLUMN = 1;
public static final String CATEGORY_REF = "Category";
public static final String COMMENT_REF = "Comments";
public static UserModel currentUser;
public static CategoryModel categorySelected;
public static FoodModel selectedFood;
public static String formatPrice(double price) {
if (price != 0)
{
DecimalFormat df = new DecimalFormat("#,##0.00");
df.setRoundingMode(RoundingMode.UP);
String finalPrice = new StringBuilder(df.format(price)).toString();
return finalPrice.replace(".",",");
}
else
return "0,00";
}
public static Double calculateExtraPrice(SizeModel userSelectedSize, List<AddonModel> userSelectedAddon) {
Double result = 0.0;
if (userSelectedSize == null && userSelectedAddon == null)
return 0.0;
else if (userSelectedSize == null)
{
//if user selected addon != null we need sum price
for(AddonModel addonModel : userSelectedAddon)
result+=addonModel.getPrice();
return result;
}
else if (userSelectedAddon == null)
{
return userSelectedSize.getPrice()*1.0;
}
else
{
//if both size and addon is selected
result = userSelectedSize.getPrice()*1.0;
for(AddonModel addonModel : userSelectedAddon)
result+=addonModel.getPrice();
return result;
}
}
public static void setSpanString(String welcome, String name, TextView textView) {
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(welcome);
SpannableString spannableString = new SpannableString(name);
StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(boldSpan,0,name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(spannableString);
textView.setText(builder,TextView.BufferType.SPANNABLE);
}
}
public class FoodModel {
private String key;
private String name,image,id,description;
private Long price;
private List<AddonModel> addon;
private List<SizeModel> size;
private Double ratingValue;
private Long ratingCount;
//for cart
private List<AddonModel> userSelectedAddon;
private SizeModel userSelectedSize;
public FoodModel() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
public List<AddonModel> getAddon() {
return addon;
}
public void setAddon(List<AddonModel> addon) {
this.addon = addon;
}
public List<SizeModel> getSize() {
return size;
}
public void setSize(List<SizeModel> size) {
this.size = size;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Double getRatingValue() {
return ratingValue;
}
public void setRatingValue(Double ratingValue) {
this.ratingValue = ratingValue;
}
public Long getRatingCount() {
return ratingCount;
}
public void setRatingCount(Long ratingCount) {
this.ratingCount = ratingCount;
}
public List<AddonModel> getUserSelectedAddon() {
return userSelectedAddon;
}
public void setUserSelectedAddon(List<AddonModel> userSelectedAddon) {
this.userSelectedAddon = userSelectedAddon;
}
public SizeModel getUserSelectedSize() {
return userSelectedSize;
}
public void setUserSelectedSize(SizeModel userSelectedSize) {
this.userSelectedSize = userSelectedSize;
}
}
公共类食品模型{
私钥;
私有字符串名称、图像、id、描述;
私人多头价格;
私有列表插件;
私有列表大小;
私人双重价值;
私人长期评级计数;
//手推车
私有列表用户选择的DDON;
私有大小模型userSelectedSize;
公共食品模型(){
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getImage(){
返回图像;
}
公共void setImage(字符串图像){
这个图像=图像;
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
公共长期价格(){
退货价格;
}
公共定价(长期价格){
这个价格=价格;
}
公共列表getAddon(){
返回插件;
}
公共无效设置加载项(列表加载项){
this.addon=addon;
}
公共列表getSize(){
返回大小;
}
公共无效设置大小(列表大小){
这个。大小=大小;
}
公共字符串getKey(){
返回键;
}
公共无效设置键(字符串键){
this.key=key;
}
公共双getRatingValue(){
回报率值;
}
公共无效设置值(双额定值){
this.ratingValue=ratingValue;
}
公共长getRatingCount(){
收益率计数;
}
公共无效设置计数(长计数){
this.ratingCount=ratingCount;
}
公共列表GetUserSelectedAddress(){
返回用户选择的地址;
}
public void setUserSelectedAddress(列出UserSelectedAddress){
this.userSelectedAddon=userSelectedAddon;
}
公共大小模型getUserSelectedSize(){
返回userSelectedSize;
}
public void setUserSelectedSize(SizeModel userSelectedSize){
this.userSelectedSize=userSelectedSize;
}
}