Если вы добавите двух пользователей, то, как вы добавляете код, приведет к такой структуре:
"googleRef": {
"userID": {
"-Ldfs32189eqdqA1": "userID1",
"-Ldfs32189eqdqA5": "userID2"
},
"gname": {
"-Ldfs32189eqdqA2": "gname1",
"-Ldfs32189eqdqA6": "gname2"
},
"email": {
"-Ldfs32189eqdqA3": "email1",
"-Ldfs32189eqdqA7": "email2"
},
"photoUrl": {
"-Ldfs32189eqdqA4": "photoUrl1",
"-Ldfs32189eqdqA8": "photoUrl2"
}
}
Таким образом, у вас есть отдельный сгенерированный push-идентификатор (ключи, начинающиеся с -
) для каждого свойства каждого пользователя, что весьма необычно.
Более идиоматическая форма хранения пользовательской информации:
"googleRef": {
"-Ldfs32189eqdqA1": {
"userID": "userID1",
"gname": "gname1",
"email": "email1",
"photoUrl": "photoUrl1"
},
"-Ldfs32189eqdqA5": {
"userID": "userID2",
"gname": "gname2"
"email": "email2"
"photoUrl": "photoUrl2"
},
}
Или (еще лучше) это:
"googleRef": {
"userID1": {
"gname": "gname1",
"email": "email1",
"photoUrl": "photoUrl1"
},
"userID2": {
"gname": "gname2"
"email": "email2"
"photoUrl": "photoUrl2"
},
}
Причины, по которым эти последние два являются более распространенными, заключаются в том, что они группируют информацию для каждого пользователя вместе, что упрощает / делает возможным поиск информации для каждого пользователя. В обоих этих случаях вы можете найти пользователей с определенным адресом электронной почты по вашему запросу.
Причина, по которой последний вариант является наилучшим, заключается в том, что информация для каждого пользователя хранится под идентификатором пользователя, который уже гарантированно будет уникальным. Эта структура делает возможным поиск информации о пользователях по их UID без запроса.
Чтобы написать структуру, подобную последней, используйте:
Map<String, Object> values = new HashMap<>();
values.put("gname", userName)
values.put("email", reEmail)
values.put("photoUrl", userpicUrl)
googleRef.child(userId).setValue(values)
Последнее замечание: вы не можете вернуть , существует ли узел или узел, так как данные загружаются из Firebase асинхронно. Чтобы узнать больше о том, что это значит, и об общем обходном пути (который должен определить интерфейс обратного вызова), см. Метод getContactsFromFirebase (), возвращающий пустой список