Я хочу заменить kids / [id] / kidLimit / [новые данные]
Итак, я делаю спиннер с данными kidName, затем с выбранным элементом из этого спиннера, который я хочу заменитьданные kidLimit (с тем же родителем, что и выбранный элемент из счетчика).
Первое, что я делаю, - это найдите уникальный ключ выбранного элемента, затем перейдите к kidLimit с этим уникальным ключом, чтобызатем используйте метод setValue ().
public class setLimit extends AppCompatActivity {
private DatabaseReference db;
private EditText etLimit;
private Button btnSetLimit;
private Spinner kidSpinner;
private String kidKey;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_limit);
etLimit = findViewById(R.id.et_limit);
btnSetLimit = findViewById(R.id.btn_confirm);
kidSpinner = findViewById(R.id.spinner_kid);
//PUTTING STRING LIST FROM FIREBASE TO SPINNER DROPDOWN STARTS HERE
db = FirebaseDatabase.getInstance().getReference().child("kids");
db.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final List<String> kid = new ArrayList<>();
for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren()) {
String kidName = dataSnapshot1.child("kidName").getValue(String.class);
kid.add(kidName);
}
ArrayAdapter<String> kidNameAdapter = new ArrayAdapter<>(setLimit.this, android.R.layout.simple_spinner_item, kid);
kidNameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
kidSpinner.setAdapter(kidNameAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//ENDS HERE
//ONCLICKLISTENER
btnSetLimit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
findId();
String newLimit = etLimit.getText().toString().trim();
db.child(kidKey).child("kidLimit").setValue(newLimit);
}
});
}
//FINDING KEY FROM THE SELECTED SPINNER ITEM
public void findId(){
String kidName = kidSpinner.getSelectedItem().toString();
db = FirebaseDatabase.getInstance().getReference().child("kids");
db.orderByChild("kidName").equalTo(kidName).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){
kidKey = dataSnapshot1.getKey();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
Итак, в основном я использовал снимок внутри метода onclick, чтобы найти ключ.Но когда я проверял их в журнале, он показал, что переменная kidkey равна нулю при первом нажатии кнопки, но после этого она больше не равна нулю.
Что я могу сделать, когда я нажимаю кнопку, я могу перейти к определенному дочернему элементу, чтобы заменить его данные, не получая никакого исключения нулевого указателя?
Вот база данных, которую я использую ![Database Used](https://i.stack.imgur.com/T1JRX.png)