# #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 и добавьте в свой вопрос.