База данных Firebase Realtime не сохраняет POJO, содержащий атрибуты List или Map - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть этот POJO:

public class Person{
    private String id;
    private List phoneNumbers=new ArrayList<>();
    private Map<String,String> fcmTokens;
    //getters + Setters + default constructor are present
}

В Упражнении: я пытаюсь сохранить этот объект в базе данных Firebase Realtime, используя приведенный ниже код, но сохраняется только значение идентификатора строки!Что мне здесь не хватает?

Person p= new Person();
p.setUid("123");
List<String> list=new ArrayList<>();
list.add("123);
list.add("23");
p.setPhoneNumbers(list);
Map<String,String> map=new HashMap<>();
map.put("asdf","asdfas");
map.put("23","@3r");
p.setFcmTokens(map);
mPersonNodeReference.setValue(p);

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Чтобы добавить подобные вложенные поля в Firebase, вам следует держаться подальше от массивов и использовать Map в соответствии с официальной документацией.Так что для вашего случая это будет что-то вроде

Person p = new Person();
p.setUid("123");
//List<String> list = new ArrayList<>();   //this will not work unless you push a new key for every value added to the list
//list.add("123");
//list.add("23");
Map<String,String> mapPhoneNumbers = new HashMap<>();
mapPhoneNumbers.put("1","123");
mapPhoneNumbers.put("2","23");
p.setPhoneNumbers(mapPhoneNumbers);
Map<String,String> map = new HashMap<>();
p.setFcmTokens(map)   //not sure what barber is?
mPersonNodeReference.setValue(p);  //did you mean p?
0 голосов
/ 09 февраля 2019

A.в деятельности:

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
    //your code.
}

B.уровень приложения build.gradle:

apply plugin: 'com.android.application'

    enter code here

android {
  // ...
}

dependencies {
  // ...
  implementation 'com.google.firebase:firebase-core:16.0.1'
  implementation 'com.google.firebase:firebase-database:16.0.1'
}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

C.уровень проекта build.gradle:

dependencies {
    classpath 'com.android.tools.build:gradle:3.3.0'
    classpath 'com.google.gms:google-services:4.0.0'
    /*classpath 'com.google.gms:google-services:4.1.0' <-- do not use this version*/
}
0 голосов
/ 08 февраля 2019

проверьте, не добавлен ли конструктор по умолчанию, необходимый для вызовов DataSnapshot.getValue (User.class)

public class Person{
       public Person() {

    }
}

примечание: несогласованное именование переменных.

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