Ответ 1
Вызов push()
будет генерировать ключ для вас.
Если вместо этого вы используете child()
, вы можете сами определить ключ/путь.
ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");
Ну, я новичок в Firebase, и хочу, чтобы у меня были свои собственные ключи, а новые базы данных были добавлены в базу данных.
Проблема:
FireBase.push().setValue(mapped_values);
Это дает структуру, как показано ниже:
Как я могу создать свой собственный собственный ключ? Например, имя пользователя или что-то еще.
Вызов push()
будет генерировать ключ для вас.
Если вместо этого вы используете child()
, вы можете сами определить ключ/путь.
ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");
String key="1234567sdfsf8";
//custom object
User user=new User();
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("Users").child(key).setValue(user);
Вы можете создать собственный ключ с помощью setValue(), даже если корень содержит много детей например, если "Пользователи" - это корень, и вы хотите добавить пользователей с электронной почтой в качестве ключа, это будет выглядеть как
firebase.child("firebase url").child("Users").child("user_1 email").setValue(...)
firebase.child("firebase url").child("Users").child("user_2 email").setValue(...)
и т.д.
Надеюсь, что это поможет.
Если вы используете FirebaseUI:
private static final CollectionReference usersCollection = FirebaseFirestore.getInstance().collection("users");
User user = new User("MyUsername", "MyPictureUrl");
String userKey = "1234567sdfsf8";
usersCollection.document(userKey).set(user); //MAGIC LINE
Просто для обмена знаниями.
если вы используете огненный, вы можете создать пользовательский ключ следующим образом
IFirebaseConfig config = new FirebaseConfig
{
AuthSecret = "SecretKey",
BasePath = "https://abc.firebaseio.com/",
Host = "abc.firebaseio.com/"
};
IFirebaseClient client = new FirebaseClient(config);
var obj = new Users
{
FirstName = "test",
MiddleName = "user",
LastName = "xyz"
};
SetResponse response = client.SetAsync("Profile", "YourID");//you can use Set() as well
response = client.SetAsync("Profile/YourID", obj);//you can use Set() as well
Просто и быстро
Map<String,Object> taskMap = new HashMap<>();
taskMap.put("Name", name.getText().toString());
taskMap.put("km", km.getText().toString());
// taskMap.put("age", "45");
taskMap.put("Day", day.getText().toString());
mDatabaseReference.push().setValue(taskMap);
если ссылка на базу данных child является фиксированной строкой, новое значение не добавится. просто он обновит предыдущее значение. например:
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(); String mText =//get data from editText or set your own custom data
Теперь, если я вставлю данные, как это:
myRef.child("abc").child("cba").setValue(mText);
каждый раз, когда я вставляю данные, он обновляет мои предыдущие данные. Это не добавит новые данные. Потому что моя ссылка здесь исправлена (myRef.child("abc").child("cba")
//эта, которая всегда исправлена).
Теперь измените значение дочернего "cba" на случайное или динамическое значение, которое не будет исправлено. Например:
Random rand = new Random();//Obtain a number between [0 - 49]. int n = rand.nextInt(50); myRef.child("abc").child(String.valueOf(n)).setValue(mText);
В этом случае он будет добавлять новое значение вместо обновления. потому что это время не зафиксировано здесь. это динамично. Метод push() делает то же самое. он генерирует случайный ключ для сохранения уникальной ссылки.
В POST-запросе он сгенерирует ID, но в PATCH, PUT-запросе будет указан ключ, который будет предоставлен вами.
В качестве обновления к setValue()
был изменен API Firebase, и setValue()
больше не работает. Теперь вы должны использовать функцию set()
:
ref.child("Victor").set("setting custom key when pushing new data to firebase database");