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

时间:2018-01-16 19:12:23

标签: android firebase firebase-security google-cloud-firestore

致电

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

我收到错误:

  

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

即使我可以将myObject添加到firestore,当它是myDoc的一部分时使用Set方法没有问题。

MyObject类(最简单的例子):

public class MyObject{
   public int i;
}

编辑: 尝试前我的数据库结构:

  

myCollection - >

doc1:

field0 - "3"

field1 - null

也尝试了没有field1

2 个答案:

答案 0 :(得分:11)

因此,现在更新的唯一方法是使用地图。在你的情况下它应该看起来像

Map<String, Object> updateMap = new HashMap();
updateMap.put("field1.i", myObject.i);

FirebaseFirestore.getInstance().collection("myCollection")
.document("doc1").update(updateMap);

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

答案 1 :(得分:2)

就我而言,我想更新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);