0

My Data Structure enter image description here

My object has multiple ArrayLists and primitives. On retrieving, I get this error Expected a List while deserializing, but got a class java.util.HashMap .

I understand I'm getting this error because that is how Firebase stores it. I just have never worked with these many fields.

My question is can I convert it to my object directly? malhobayyeb pointed this here https://stackoverflow.com/a/35979715/9860553 which seems pretty close to my case, but the answer he suggested is not working

I'm attaching my Objects structure too.

Though I think the code is not needed. The issue is simply "in firebase, How to handle data if the list is inside another object "

package com.example.desktop.digitlbc.Model;

import java.util.ArrayList;

public class BusinessData {
private String
        tvbAbout,
        tvbProduct,tvbNews,tvbTrends,tvbOffers,
        tvbEvents,
        tvbCarrers;

private ArrayList<ImageData> idAlImageDataGallery;
private ArrayList<ImageData> idAlImageDataDocGallery;
private ArrayList<ImageData> idAlImageDataPersGallery;
private ArrayList<ImageData> idAlImageDataBizGallery;

private ArrayList<ImageData> idAlProduct;
private ArrayList<ImageData> idAlNews;
private ArrayList<ImageData> idAlTrends;
private ArrayList<ImageData> idAlOffers;

private String id;
private long timestamp;

private ArrayList<Product> product;

public BusinessData() {
}

public BusinessData(String tvbAbout, String tvbProduct, String tvbNews, String tvbTrends, String tvbOffers, String tvbEvents, String tvbCarrers, ArrayList<ImageData> idAlImageDataGallery, ArrayList<ImageData> idAlImageDataDocGallery, ArrayList<ImageData> idAlImageDataPersGallery, ArrayList<ImageData> idAlImageDataBizGallery, ArrayList<ImageData> idAlProduct, ArrayList<ImageData> idAlNews, ArrayList<ImageData> idAlTrends, ArrayList<ImageData> idAlOffers, String id, long timestamp, ArrayList<Product> product) {
    this.tvbAbout = tvbAbout;
    this.tvbProduct = tvbProduct;
    this.tvbNews = tvbNews;
    this.tvbTrends = tvbTrends;
    this.tvbOffers = tvbOffers;
    this.tvbEvents = tvbEvents;
    this.tvbCarrers = tvbCarrers;
    this.idAlImageDataGallery = idAlImageDataGallery;
    this.idAlImageDataDocGallery = idAlImageDataDocGallery;
    this.idAlImageDataPersGallery = idAlImageDataPersGallery;
    this.idAlImageDataBizGallery = idAlImageDataBizGallery;
    this.idAlProduct = idAlProduct;
    this.idAlNews = idAlNews;
    this.idAlTrends = idAlTrends;
    this.idAlOffers = idAlOffers;
    this.id = id;
    this.timestamp = timestamp;
    this.product = product;
}

public ArrayList<Product> getProduct() {
    return product;
}

public void setProduct(ArrayList<Product> product) {
    this.product = product;
}

public String getTvbAbout() {
    return tvbAbout;
}

public void setTvbAbout(String tvbAbout) {
    this.tvbAbout = tvbAbout;
}

public String getTvbProduct() {
    return tvbProduct;
}

public void setTvbProduct(String tvbProduct) {
    this.tvbProduct = tvbProduct;
}

public String getTvbNews() {
    return tvbNews;
}

public void setTvbNews(String tvbNews) {
    this.tvbNews = tvbNews;
}

public String getTvbTrends() {
    return tvbTrends;
}

public void setTvbTrends(String tvbTrends) {
    this.tvbTrends = tvbTrends;
}

public String getTvbOffers() {
    return tvbOffers;
}

public void setTvbOffers(String tvbOffers) {
    this.tvbOffers = tvbOffers;
}

public String getTvbEvents() {
    return tvbEvents;
}

public void setTvbEvents(String tvbEvents) {
    this.tvbEvents = tvbEvents;
}

public String getTvbCarrers() {
    return tvbCarrers;
}

public void setTvbCarrers(String tvbCarrers) {
    this.tvbCarrers = tvbCarrers;
}

public ArrayList<ImageData> getIdAlImageDataGallery() {
    return idAlImageDataGallery;
}

public void setIdAlImageDataGallery(ArrayList<ImageData> idAlImageDataGallery) {
    this.idAlImageDataGallery = idAlImageDataGallery;
}

public ArrayList<ImageData> getIdAlImageDataDocGallery() {
    return idAlImageDataDocGallery;
}

public void setIdAlImageDataDocGallery(ArrayList<ImageData> idAlImageDataDocGallery) {
    this.idAlImageDataDocGallery = idAlImageDataDocGallery;
}

public ArrayList<ImageData> getIdAlImageDataPersGallery() {
    return idAlImageDataPersGallery;
}

public void setIdAlImageDataPersGallery(ArrayList<ImageData> idAlImageDataPersGallery) {
    this.idAlImageDataPersGallery = idAlImageDataPersGallery;
}

public ArrayList<ImageData> getIdAlImageDataBizGallery() {
    return idAlImageDataBizGallery;
}

public void setIdAlImageDataBizGallery(ArrayList<ImageData> idAlImageDataBizGallery) {
    this.idAlImageDataBizGallery = idAlImageDataBizGallery;
}

public ArrayList<ImageData> getIdAlProduct() {
    return idAlProduct;
}

public void setIdAlProduct(ArrayList<ImageData> idAlProduct) {
    this.idAlProduct = idAlProduct;
}

public ArrayList<ImageData> getIdAlNews() {
    return idAlNews;
}

public void setIdAlNews(ArrayList<ImageData> idAlNews) {
    this.idAlNews = idAlNews;
}

public ArrayList<ImageData> getIdAlTrends() {
    return idAlTrends;
}

public void setIdAlTrends(ArrayList<ImageData> idAlTrends) {
    this.idAlTrends = idAlTrends;
}

public ArrayList<ImageData> getIdAlOffers() {
    return idAlOffers;
}

public void setIdAlOffers(ArrayList<ImageData> idAlOffers) {
    this.idAlOffers = idAlOffers;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public long getTimestamp() {
    return timestamp;
}

public void setTimestamp(long timestamp) {
    this.timestamp = timestamp;
}
}

Edit 1

The code is changed now. I've achieved what I wanted FOR NOW in a very caveman way, using the answer in the link above. But that leaves the code useless for future updates.

My original code was a straightforward valueEventListener. nothing special really. nothing at all.

businessData = dataSnapshot.getValue(BusinessData.class);

the refernece is pointing to the right location too

mRef = database.getReference(Common.id).child("bizData");
C Forge
  • 215
  • 1
  • 8
  • Please add the code that you are using to get the data, not only your model class. – Alex Mamo Oct 20 '18 at 07:46
  • @AlexMamo thank you for the revert. The issue is , as I mentioned earlier, that maybe is's not a good idea to nest ArrayLists in Firebase. I hope someone has found solution by now – C Forge Oct 21 '18 at 00:13

0 Answers0