代码之家  ›  专栏  ›  技术社区  ›  CaptainNemo

Firestore更新失败,IllegalArgumentException:无效数据。不支持的类型

  •  9
  • CaptainNemo  · 技术社区  · 8 年前

    呼叫时

    FirebaseFirestore.getInstance().collection("myCollection").document("doc1").update("field1",myObject);
    

    我得到错误:

    IllegalArgumentException:无效数据。不支持的类型:com。myProg公司。物体。MyObject(在field1字段中找到)

    即使我 可以 当myObject是myDoc的一部分时,使用Set方法将其添加到firestore中,不会出现问题。

    MyObject类(最简单的示例):

    public class MyObject{
       public int i;
    }
    

    编辑: 尝试之前的my DB结构:

    myCollection->

    doc1:
    
    field0 - "3"
    
    field1 - null
    

    也在没有field1的情况下进行了尝试

    2 回复  |  直到 6 年前
        1
  •  14
  •   Dhara Bhavsar    8 年前

    因此,目前更新的唯一方法是使用地图。你的情况应该是

    Map<String, Object> updateMap = new HashMap();
    updateMap.put("field1.i", myObject.i);
    
    FirebaseFirestore.getInstance().collection("myCollection")
    .document("doc1").update(updateMap);
    

    我认为Firestore应该真正更新API,以便于整体更新嵌套对象。

        2
  •  2
  •   Adarsh Binjola    8 年前

    在我的例子中,我想更新firestore中的复杂对象。

    public class UserInitialModel { private List<ServiceItemModel> servicesOffered; }

    public class ServiceItemModel{
    private String serviceName;
    private String price;
    }
    

    我尝试更新时出错 Java语言lang.IllegalArgumentException:无效数据。不支持的类型:

    我用地图解决了它

    List<Map<String,Object>> list=new ArrayList<>();
            for (ServiceItemModel model:
            mUserInitialPresenter.getUserInitialModel().getServicesOffered()) {
                Map<String,Object> servicesOffered=new HashMap<>();
                servicesOffered.put("serviceName",model.getServiceName());
                servicesOffered.put("price",model.getPrice());
                list.add(servicesOffered);
            }
            dataMap.put("servicesOffered",list);