点击“保存”按钮后,我的目标是递减值“数量”。当我从onClick调用函数updateTraining时会发生错误,因为传递参数为null。所以我的问题是如何正确地将值从数据库传递到updateTraining并减少数量值。
在我的代码下面:
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();
}
}
我的db结构是:
答案 0 :(得分:0)
这样做:
在Activity
声明下添加:
int quantity=0;
在//onCreate
内:
datababaseTraining = FirebaseDatabase.getInstance().getReference().child("Event");
datababaseTraining.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren()){
id=data.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
现在字符串id
等于Event
现在在updateTraining(quantity, id);
内,您应该quantity=0
和id=key_of_node
答案 1 :(得分:0)
您的引用对象为空,因此您的数据库未更新
textViewTime.setText("Hour: " + String.valueOf(time));
textViewQuantity.setText("Quantity: " + String.valueOf(quantity));
在此行下方添加此
this.quantity = quantity;
this.id=id;