Как добавить узел и подузел со значениями в Firebase в Android Studio - PullRequest
0 голосов
/ 04 декабря 2018

Я учусь создавать приложения для Android и буду признателен за помощь в этом вопросе.Я хотел бы знать, как добавить узел, а затем подузел этого узла со значениями в Firebase.Я использую Android Studio и сохранил данные с помощью push (), но в этом случае мне не нужен сгенерированный ключ, ключ уже существует.Мне нужно добавить grocery_list_key_1, затем product_key_x (их больше) и атрибуты для product_key_x со значениями.

screenshot of firebase database

Эти ключи вводятся вручную на скриншоте для демонстрации.Firebase сгенерировал для них строку, потому что они являются первичными ключами в другой таблице.Я знаю, что это база данных nosql, но нужен какой-то механизм для ее симуляции.

В методе saveGL_withProducts я ввел GroceryList в узел grocerylists с атрибутами и значениями и получил обратно сгенерированный ключ, который я хочу добавить как дочерний в узле grocerylistproductsс перечнем продуктов.

public void saveGL_withProducts(GroceryListsModel groceryListsModel, List<GroceryListProductsModel> groceryListProductsModels){

    if (firebaseDatabase == null)
        firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference ref = firebaseDatabase.getReference().child(GROCERYLISTSNODE);
    DatabaseReference pushRef = ref.push();
    pushRef.setValue(groceryListsModel);
    String generated_GL_key = pushRef.getKey();


    if(!isNullOrBlank(generated_GL_key)){


        //TO DO ADDING IN GROCERYLISTPRODUCTS NODE



    }
    else{
        //TO DO

    }



}

Ценю любые предложения.Спасибо за ваше время!

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете ознакомиться с документацией здесь для общих примеров.Метод push вставит новый узел с уникальным ключом, тогда как метод setValue можно использовать для вставки данных в конкретный узел.

Узел, в который должны быть вставлены данные, можно указать вследующим образом:

User user = new User(name, email);
mDatabase.child("users").child(userId).setValue(user);

Здесь класс User является POJO, который обеспечивает структуру данных.Также должно быть возможно использовать Map, который описывает отображение вместо класса.

В вашем случае код будет выглядеть примерно так:

ref.child("grocery_list_key_1").child("product_key_1").setValue(data);

Предполагая refуказывает на узел «grocerylistproducts».Как видите, вам нужно заранее знать имена всех промежуточных узлов, чтобы это работало.

Кроме того, метод setValue перезаписывает любую существующую информацию об узлах.Таким образом, вы должны использовать подходящие методы обновления, как указано здесь , если нужно изменить только определенные поля.

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