Android Firestore - Обновление объекта в массиве приводит к неподдерживаемому типу - PullRequest
0 голосов
/ 20 ноября 2018

Я запутался в использовании новой функции firestore

https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

В документе firestore у меня есть массив "List" с пользовательскими объектами "MyObect"

...update("TestArray", FieldValue.arrayUnion("Test"));

работает нормально и, как и ожидалось.

Но когда я пытаюсь это сделать:

MyObject object = new MyObject(Value1, Value2);    
...update("List", FieldValue.arrayUnion(object));

Я заканчиваю с ошибкой

java.lang.IllegalArgumentException: Invalid data. Unsupported type: com.my.app.MyObject
    at com.google.firebase.firestore.core.UserData$ParseContext.createError(com.google.firebase:firebase-firestore@@17.1.3:293)
    at com.google.firebase.firestore.UserDataConverter.parseScalarValue(com.google.firebase:firebase-firestore@@17.1.3:405)
    at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.3:254)
    at com.google.firebase.firestore.UserDataConverter.parseArrayTransformElements(com.google.firebase:firebase-firestore@@17.1.3:419)
    at com.google.firebase.firestore.UserDataConverter.parseSentinelFieldValue(com.google.firebase:firebase-firestore@@17.1.3:335)
    at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.3:237)
    at com.google.firebase.firestore.UserDataConverter.parseUpdateData(com.google.firebase:firebase-firestore@@17.1.3:171)
    at com.google.firebase.firestore.DocumentReference.update(com.google.firebase:firebase-firestore@@17.1.3:239)

РЕДАКТИРОВАТЬ Вот моя структура базы данных:

/ UserData / UserID / Data / DataSet01 /

По этому пути у меня есть несколько значений, таких как:

  • name
  • рождение
  • пол
  • список (массив)

рождение пол список (массив)

DocumentReference document= FirebaseFirestore.getInstance().document("UserData").collection("UserID").document("DataSet01");
document.update("TestArray", FieldValue.arrayUnion("test"));

Добавляет поле "TestArray"и любой данной строки, в приведенном выше случае" test ".

Но следующий код не работает:

DocumentReference document= FirebaseFirestore.getInstance().document("UserData").collection("UserID").document("DataSet01");
document.update("List", FieldValue.arrayUnion(myObject));

1 Ответ

0 голосов
/ 04 марта 2019

У меня была такая же проблема, и я обнаружил, что использование пользовательского объекта не работает.Поэтому я попытался с HashMap<String,Any>

Я Kotlin

val myObject = HashMap<String,Any>()
myObject["Value1"]="Some Value"
myObject["Value2"]="Some other Value"
document.update("List", FieldValue.arrayUnion(myObject))

В Java

HashMap<String, String> myObject = new HashMap<String, String>();
myObject.put("Value1","Some Value");
myObject.put("Value1","Some Other Value");
document.update("List", FieldValue.arrayUnion(myObject));

Надеюсь, это помогает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...