Hy, я пишу приложение, которое должно получать определенные данные из firebase, используя позицию элемента в listView. Моя проблема в том, что я понятия не имею, как взять этот предмет на firebase.
Для всех дочерних элементов Torneo я должен контролировать все nameCreator. Я пробовал это:
public Boolean RegisterUser(Data data, final int position, final Context c){
boolean registration;
final ArrayList<String> Creator = new ArrayList<>();
databaseReference.orderByChild("Tornei").equalTo(Integer.toString(position)).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
Creator.add(data.child("nameCreator").getValue().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
if (Creator.equals(data.getNameCreator())){
registration = false;
}else{
registration = true;
}
return registration;
}
Данные — это класс с некоторыми геттерами и сеттерами, которые я создал. position — это позиция элемента в представлении списка.
Спасибо за ответы.
Кнопка для выбора конкретного элемента




Измените следующее:
databaseReference.orderByChild("Tornei").equalTo(Integer.toString(position)).addListenerForSingleValueEvent(new ValueEventListener() {
в это:
databaseReference.child("Tornei").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
Creator.add(datas.child("nameCreator").getValue().toString());
if (Creator.equals(data.getNameCreator())){
registration = false;
}else{
registration = true;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Затем вы сможете зациклиться и получить значение nameCreator
Не работает, мне говорит java.lang.String java.lang.Object.toString()
измените это Creator.add(datas.child("nameCreator").getValue().toString()); на следующее также Creator.add(datas.child("nameCreator").getValue(String.class));
Также я удалил toString перед addListenerForSingleValueEvent, как написано в ответе
Это возвращает меня Всегда правда. Первое nameCreator не совпадает с именем, которое у меня есть вставка
Теперь возвращайте всегда false
Это просто.
【Шаг 1 | Получите данные снимка и сохраните их в глобальной переменной】
DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference fruitsReference = rootReference.child("fruits");
DataSnapshot fruitsData;
@Override
protected void onStart() {
super.onStart();
fruitsReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshots) {
fruitsData = dataSnapshots;
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
【Шаг 2 | Найдите свою целевую позицию в цикле】
public void onClick(View view) {
int index = 0;
for (DataSnapshot childSnapshot : fruitsData.getChildren()) {
if (index == 1) { //your target position
DatabaseReference currentFruitReference = childSnapshot.getRef();
currentFruitReference.setValue("peach"); //do whatever you want
}
index++;
}
}
что у тебя в списке?