Я создал обработчик события для кнопки onClick. Когда я нажимаю на кнопку, я хочу передать заранее записанный номер в базе данных в раздел цены.
Моя проблема в том, что: когда я нажимаю на кнопку и хочу передать значение «код цены», записанное в базе данных, в «цена». Но обязательно, чтобы pricecode был предварительно записан в базу данных.

String price = String.valueOf(db.child("User").child("pricecode"));
и вместо значения "1000" пишет там ссылку на ключ. Подробнее читайте на скриншоте.
public void onClickB1 (просмотр)
{
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
String id = mDataBase.getKey();
String name = String.valueOf(textB1.getText());
String price = String.valueOf(db.child("User").child("pricecode")); // PROBLEM
User newUser = new User(id,name,price);
//mDataBase.push().setValue(newUser);
if (!TextUtils.isEmpty(name))
{
mDataBase.push().setValue(newUser);
}
else
{
Toast.makeText(this,"empty text",Toast.LENGTH_LONG).show();
}
}




String price = String.valueOf(db.child("User").child("pricecode")); and instead of the value "1000", it writes a reference to the key there.
Это ожидаемое поведение после следующей операции:
String price = String.valueOf(db.child("User").child("pricecode"))
Сохраняет ли нет в переменной price фактическое значение (1000) поля pricecode. Код внутри метода valueOf() является ссылкой, поэтому, когда вы передаете эту ссылку методу valueOf(), вы получаете:
https://testkornze...
Таким образом, существует способ нет, с помощью которого вы можете прочитать значение определенного поля, существующего в базе данных реального времени без, прикрепив прослушиватель. Ранее я ответил на ваш вопрос о том, как читать значение pricecode. Таким образом, чтобы иметь возможность использовать значение pricecode, все операции, которым требуются данные из базы данных, должны быть добавлены внутри метода onComplete().
Как правильно сочетать onComplete с onCLick?
Выполняйте щелчок только тогда, когда данные доступны. Попробуйте также взглянуть на этот отвечать.
Извините, но я не понимаю, как связать onClick и onComplete. Я уже слишком запутался.
Это шаги. Прикрепите прослушиватель кликов, внутри onClick добавьте существующий код здесь, а внутри onComplete используйте значение pricecode tp для создания нового объекта, верно?
Алексей, спасибо за помощь! Я постараюсь добиться желаемого результата.
Как объяснил Алекс, этот код просто создает ссылку на путь в базе данных, но фактически не считывает значение из этого пути:
db.child("User").child("pricecode")
Чтобы прочитать значение, вам нужно либо вызвать addListenerForSingleValueEvent, либо вызвать get по ссылке, как показано в документации Firebase на чтение данных один раз. Исходя из этого:
db.child("User").child("pricecode").get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (!task.isSuccessful()) {
Log.e("firebase", "Error getting data", task.getException());
}
else {
DataSnapshot snapshot = task.getResult()l
String price = String.valueOf(snapshot.getValue());
User newUser = new User(id,name,price);
//mDataBase.push().setValue(newUser);
if (!TextUtils.isEmpty(name))
{
mDataBase.push().setValue(newUser);
}
else
{
Toast.makeText(this,"empty text",Toast.LENGTH_LONG).show();
}
}
}
});
Благодарю вас! Сейчас попробовал ваш метод, получил "ноль".
Что там означает "получил ноль"? --- Кроме того: вы уже прошли код onComplete в отладчике построчно, проверяя значение каждой переменной в каждой строке? Если да, то какая первая строка не сделала того, что вы от нее ожидаете?
Строковая цена = String.valueOf(snapshot.getValue()); Да, есть запись в firebase и выводит нулевое значение Пример: public void onClickB1 (View view) {вот твой код}
Я ожидаю, что значение pricecode при нажатии на кнопку (OnClick) передаст свое значение цене (user-price)
Null возвращает в пользовательской цене с этим кодом (ваш фрагмент выше)
Что выводит snapshot.getValue() (то есть без String.valueOf)?
Если String price = snapshot.getValue(); Ошибка: несовместимые типы. Найдено: 'java.lang.Object', требуется: 'java.lang.String' Если String price = String.valueOf(snapshot.getValue()); Вывод: пользователь - цена = null Хотя код цены = 1000 или любое другое значение
Да, я не это имел в виду. Я имею в виду, если вы просто Log.d(snapshot.getValue()), что вы получите на выходе.
Ошибка: несовместимые типы. Найдено: 'java.lang.Object', требуется: 'java.lang.String' Я вас не понимаю, извините
Если вы Log.d(snapshot.getValue()), что он выводит?
«все операции, требующие данных из базы данных, должны быть добавлены в метод onComplete()». Я не совсем понимаю, как это выглядит? Можно краткий набросок, пожалуйста