Как избежать перезаписи данных в firebase

Это мой код для добавления записей в Firebase. есть переменная снаружи, называемая restauCount со значением (int) как 1

public void sendMessage(){

    int restauCount = 1;
    String identifier ="Restaurant" + restauCount;
    Firebase userRef = firebaseRef.child("Caloocan");
    EditText nameInput = (EditText) findViewById(R.id.nameTxt);
    String name = nameInput.getText().toString();

    EditText locInput = (EditText) findViewById(R.id.locationTxt);
    String location = locInput.getText().toString();

    EditText typeInput = (EditText) findViewById(R.id.typeTxt);
    String foodtype = typeInput.getText().toString();
    if (!name.equals("")){
        Map<String, String> caloocan = new HashMap<String, String>();
        caloocan.put("resname", name);
        caloocan.put("resloc", location);
        caloocan.put("foodtype", foodtype);

        Map<String, Map<String, String>> users = new HashMap<String, Map<String, String>>();
        users.put(identifier,caloocan);

        userRef.setValue(users);
        restauCount++;
    }
}

Когда я снова запускаю sendessage (). я буду вводить в поля, и когда я нажму ADD, который является sendMessage, он будет добавлен в FireBase, однако, когда я добавлю новые данные. ОНО ЗАПИСЫВАЕТ СТАРЫЕ ДАННЫЕ? КАК ДОБАВИТЬ НЕСКОЛЬКО ДАННЫХ В FIREBASE БЕЗ ЗАПИСИ ДАННЫХ? restauCount был создан, чтобы увеличить количество Ресторанов, которые я ввел,

Ответы на вопрос(4)

Решение Вопроса

вам нужно обновитьidentifier остается прежним:

int restauCount = 1;
String identifier ="Restaurant" + restauCount;

попробуйте что-то вроде:

    long restauCount = System.currentTimeMillis();
    String identifier ="Restaurant" + restauCount;

здесь каждый раз, когда вы отправляетеsendMessage() Ваш идентификатор получил конкретный идентификатор как текущее время в миллисекундах + «Ресторан»

если важно сохранить номера int, дайте мне знать

 Allen Francisco31 мая 2016 г., 19:20
это работает, но мне нужен уникальный идентификатор, чтобы легко получить данные, если я буду использовать его. любая идея? как счетчик, который будет увеличиваться при нажатии кнопки?
 Allen Francisco31 мая 2016 г., 19:24
спасибо за идею, братан задача решена. создал int для всего класса вместо времени! :)
 Mounir Elfassi31 мая 2016 г., 19:53
рад помочь Аллену
 Mounir Elfassi31 мая 2016 г., 19:16
Вы пробовали мой ответ ?, потому что, чтобы избежать ЗАПИСИ данных, вам нужно каждый раз, когда новый идентификатор
 Allen Francisco31 мая 2016 г., 17:52
ошибка моего кода была в .put (), а не в моем счетчике для ресту, извините

userRef.push().setValue(users); Метод push () генерирует уникальный ключ каждый раз, когда в указанную ссылку Firebase добавляется новый дочерний элемент.

использование

userRef.setValue(users).push();

вместоuserRef.setValue(users);

 Allen Francisco31 мая 2016 г., 19:02
ошибка: не удается разрешить метод push ()
 Allen Francisco31 мая 2016 г., 17:51
есть ошибка с push. мое приложение закрывается, когда я пытаюсь поместить это "userRef.setValue (userRef.push ());"
 M.Waqas Pervez31 мая 2016 г., 18:40
это не userRef.setValue (userRef.push ()); это userRef.setValue (users) .push ();

Вы используете всегдатот же реф

String identifier ="Restaurant" + restauCount;
Firebase userRef = firebaseRef.child("Caloocan");
userRef.setValue(users);
restauCount++;

Проверьте документ:

Использование setValue () таким образом перезаписывает данные в указанном месте, включая любые дочерние узлы.

В твоем случае тыпереопределяют одни и те же данные по этой причине.

Вы должны использоватьpush() метод для генерации уникального идентификатора каждый раз, когда новый дочерний элемент добавляется к указанной ссылке Firebase.

Firebase userRef = firebaseRef.child("Caloocan");
Firebase newRef =  userRef.push();
newRef.setValue(users);

//to get the key
String key = newRef.getKey();

Ваш ответ на вопрос