Mein Ziel ist Dekrement Wert "Menge" nach dem Klick auf den Button "Speichern". Beim Aufruf der Funktion updateTraining von onClick tritt ein Fehler auf, weil übergebene Argumente null sind. Meine Frage ist also, wie ich Werte aus der Datenbank korrekt an updateTraining übergeben und den Mengenwert dekrementieren soll.Update Daten in Firebase-Datenbank/Weitergabe Wert
Unter meinen Code:
public class Activity12 extends AppCompatActivity implements View.OnClickListener{
ListView listViewTraining;
int quantity;
String id;
List<AddTraining> trainingList;
Button buttonUpdate;
DatabaseReference datababaseTraining;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_12);
datababaseTraining = FirebaseDatabase.getInstance().getReference("Event");
listViewTraining = (ListView) findViewById(R.id.listViewTraining);
trainingList = new ArrayList<>();
listViewTraining.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
AddTraining addTraining = trainingList.get(i);
showUpdateDialog(addTraining.getPlace(), addTraining.getDate(), addTraining.getTime(), addTraining.getQuantity(), addTraining.getId());
return false;
}
});
}
@Override
protected void onStart() {
super.onStart();
datababaseTraining.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
trainingList.clear();
for(DataSnapshot trainingSnapshot : dataSnapshot.getChildren()){
//First checkout
AddTraining addtraining = trainingSnapshot.getValue(AddTraining.class);
System.out.println("check " + addtraining.getPlace());
System.out.println("check " + addtraining.getTime());
System.out.println("check " + addtraining.getDate());
System.out.println("check " + addtraining.getQuantity());
System.out.println("check " + addtraining.getId());
trainingList.add(addtraining);
}
TrainingList adapter = new TrainingList(Activity12.this, trainingList);
listViewTraining.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void showUpdateDialog(String place, String date, int time, int quantity, String id){
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
System.out.println("checkpoint2 " + quantity);
final View dialogView = inflater.inflate(R.layout.update_dialog, null);
dialogBuilder.setView(dialogView);
final TextView textViewPlace = (TextView) dialogView.findViewById(R.id.textViewPlace2);
final TextView textViewDate = (TextView) dialogView.findViewById(R.id.textViewDate2);
final TextView textViewTime = (TextView) dialogView.findViewById(R.id.textViewTime2);
final TextView textViewQuantity = (TextView) dialogView.findViewById(R.id.textViewQuantity2);
buttonUpdate = (Button) dialogView.findViewById(R.id.buttonUpdate);
buttonUpdate.setOnClickListener(this);
dialogBuilder.setTitle("More details:");
final AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
textViewPlace.setText(place);
textViewDate.setText("Date: " + date);
textViewTime.setText("Hour: " + String.valueOf(time));
textViewQuantity.setText("Quantity: " + String.valueOf(quantity));
}
@Override
public void onClick(View view) {
if (view == buttonUpdate) {
updateTraining(quantity, id);
}
}
private void updateTraining(int quantity, String id){
System.out.println("checkout3 " + quantity);
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Event");
databaseReference.child(id).child("quantity").setValue(quantity-1);
Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show();
}
}
Meine Struktur von db ist:
nicht klar, was Sie tun .. aber ja Menge und id sind beide null, da sie nie etwas in den ersten place..I verwiesen erraten Sie bereits haben ID in der Datenbank richtig? –
Wo ist die Struktur? –
Entschuldigung für Fehler, ich habe meinen Beitrag editiert "id" hat den gleichen Wert wie Kindknoten – drapek