「保存」ボタンをクリックした後、目標は「数量」減少します。渡す引数がnullなので、onClickから関数updateTrainingを呼び出すとエラーが発生します。だから私の質問は、データベースからupdateTraining値とデクリメント量の値を正しく渡す方法です。firebaseデータベース/通過値のデータを更新する
私のコードの下:デシベルの
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();
}
}
私の構造は次のとおりです。
を追加し、あなたが何をしているかクリアしていない..しかし、彼らは最初place..Iには何も参照されないので、はい量とidは、両方ともNULLであるあなたが既に持っていると思いますIDはデータベースの権利ですか? –
構造はどこですか? –
間違えて申し訳ありませんが、私は投稿 "id"を編集しました。子ノードと同じ値です – drapek