Как вычесть количество товара из базы данных firebase в реальном времени?

# #java #android #firebase #firebase-realtime-database

#Ява #Android #огневая база #firebase-база данных в реальном времени

Вопрос:

Я пытаюсь составить меню товаров для складского приложения. Таким образом, в этом меню пользователь может сканировать qr-штрих-код, после чего такие данные, как количество, название, позиция, будут отображаться в форме, которую я установил в интерфейсе. Ниже формы для отображения данных будет отдельная форма для ввода количества, необходимого пользователю, и для чего будет использоваться этот элемент, после этого пользователь нажмет кнопку отправить, количество данных будет обновлено.

Моя проблема в том, что когда пользователь нажимает кнопку для отправки данных, мое приложение выходит из строя и удаляет мой журнал, поэтому я не могу определить проблему.

Код для отправки данных (инициализации)

 /*Scan Order*/  inputQuantity_ = (EditText) findViewById(R.id.inputItemQuantityPop);  inputProject_ = (EditText) findViewById(R.id.nameSearchPop);  ambil = (Button) findViewById(R.id.button);   Nama = (TextView) findViewById(R.id.itemName);  Lokasi = (TextView) findViewById(R.id.itemRack);  Jumlah = (TextView) findViewById(R.id.itemQuantity);  

Кнопка для отправки

 ambil.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {   String date = simpleDateFormat.format(calendar.getTime());  String time = simpleDateFormat1.format(calendar.getTime());  String name = Nama.getText().toString();  Integer kuantitas = Integer.parseInt(Jumlah.getText().toString());  Integer quantity = Integer.parseInt(inputQuantity_.getText().toString().trim());  String project = inputProject_.getText().toString().trim();  String key = mDatabaseFinish.push().getKey();    if (quantity lt;= 0) {  inputQuantity_.setError("quantity is required");  inputQuantity_.requestFocus();  return;  }   if (project.isEmpty()){  inputProject_.setError("project is required");  inputProject_.requestFocus();  return;  }   mDatabaseDropdown.addListenerForSingleValueEvent(new ValueEventListener() {  @Override  public void onDataChange(@NonNull DataSnapshot snapshot) {  for (DataSnapshot ds : snapshot.getChildren()){  String namecompare = ds.child("name").getValue(String.class);  Integer total = Integer.parseInt(String.valueOf(kuantitas))-quantity;   if (name.equals(namecompare)) {  if (total gt;= 0) {  mDatabaseFinish.child(key).child("key").setValue(key);  mDatabaseFinish.child(key).child("date").setValue(date);  mDatabaseFinish.child(key).child("time").setValue(time);  mDatabaseFinish.child(key).child("name").setValue(name);  mDatabaseFinish.child(key).child("quantity").setValue(quantity);  mDatabaseFinish.child(key).child("project").setValue(project);  mDatabaseFinish.child(key).child("status").setValue("Finish");   mDatabaseAddStock.child(adminStockIn.key).child("quantity").setValue(total);   mReference.child(admin_id).addListenerForSingleValueEvent(new ValueEventListener() {  @Override  public void onDataChange(@NonNull DataSnapshot snapshot) {  UserRegister userRegister = snapshot.getValue(UserRegister.class);  if (userRegister != null) {   String uid = userRegister.uid;  String orderedby = userRegister.username;   mDatabaseFinish.child(key).child("uid").setValue(uid);  mDatabaseFinish.child(key).child("orderedby").setValue(orderedby);  }  }   @Override  public void onCancelled(@NonNull DatabaseError error) {   }  });  Toast.makeText(AdminStockOutActivity2.this, "Order can be taken", Toast.LENGTH_SHORT).show();  overridePendingTransition(0, 0);  finish();  }  }  else if (total lt; 0){  Toast.makeText(AdminStockOutActivity2.this, "Out of stock", Toast.LENGTH_SHORT).show();  }  }  }   @Override  public void onCancelled(@NonNull DatabaseError error) {   }  });  }  });  

для сканирования

 @Override public void onClick(View v) {  scanCode(); }  private void scanCode() {   IntentIntegrator integrator = new IntentIntegrator(this);  integrator.setCaptureActivity(CaptureAct.class);  integrator.setOrientationLocked(false);  integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);  integrator.setPrompt("Scanning Code");  integrator.initiateScan();  integrator.setBeepEnabled(false); }  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {  super.onActivityResult(requestCode, resultCode, data);  IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);  if (result != null) {  if (result.getContents() != null) {  mDatabaseAddStock.addListenerForSingleValueEvent(new ValueEventListener() {  @Override  public void onDataChange(@NonNull DataSnapshot snapshot) {  if (snapshot.hasChildren()){  for (DataSnapshot ds : snapshot.getChildren()) {  String namecompare = ds.child("key").getValue(String.class);  AdminStockIn adminStockIn = ds.getValue(AdminStockIn.class);  if ((result.getContents()).equals(namecompare)) {  String nama = ds.child("name").getValue().toString();  int kuantitas = Integer.parseInt(String.valueOf(adminStockIn.quantity));  String rack = ds.child("rack").getValue().toString();   Nama.setText(nama);  Jumlah.setText(String.valueOf(kuantitas));  Lokasi.setText(rack);  }  }  }  }   @Override  public void onCancelled(@NonNull DatabaseError error) {   }  });  }  else {  Toast.makeText(this, "No result", Toast.LENGTH_LONG).show();  }  }  else {  super.onActivityResult(requestCode, resultCode, data);  } }  

Есть ли какие-нибудь советы по решению моего дела?

Комментарии:

1. Если приложение выходит из строя, возникает трассировка стека. Пожалуйста, посмотрите это в logcat и добавьте в свой вопрос.