Это мой второй вопрос, и спасибо заранее.
Проблема в основном заключается в невозможности передать значение поля qrCode (EditText) в myRef DatabaseReference, так что значение передается в форме(например. "1-завтрак", "2-завтрак" и т. д. *
изображение для базы данных:
Я попытался пройтизначение как возвращаемое String.valueOf (qrCodes) путем создания метода, но это приводит к сбою. Наше приложение продолжает падать. Более того, значение продолжает передаваться как ноль.
package com.vidmun.dhananjay.qrscanner;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Text;
import static android.content.ContentValues.TAG;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button buttonScan;
private Button delete;
private EditText qrCode;
private static final String TAG = MainActivity.class.getSimpleName();
private IntentIntegrator qrScan;
FirebaseDatabase database = FirebaseDatabase.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myRef.addChildEventListener(new MyChildEventListener());
delete = (Button) findViewById(R.id.delete);
buttonScan = (Button) findViewById(R.id.buttonScan);
qrCode = (EditText) findViewById(R.id.qrCode);
qrScan = new IntentIntegrator(this);
buttonScan.setOnClickListener(this);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
deleteValueFromDb();
}
});
}
//Getting the scan results
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
//if qrcode has nothing in it
if (result.getContents() == null) {
Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
} else {
//if qr contains data
try {
//converting the data to json
JSONObject obj = new JSONObject(result.getContents());
} catch (JSONException e) {
e.printStackTrace();
//if control comes here that means the encoded format not matches
//in this case you can display whatever data is available on the qrcode
qrCode.setText(result.getContents());
Toast.makeText(this, result.getContents(), Toast.LENGTH_LONG).show();
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void onClick(View view) {
//initiating the qr code scan
qrScan.initiateScan();
}
DatabaseReference myRef = database.getReference(String.valueOf(qrCode));
public void deleteValueFromDb(){
myRef.child("0").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
dataSnapshot.getRef().removeValue();
Toast.makeText(getApplicationContext() , "Can Eat", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext() , "Already Eaten", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
}
class MyChildEventListener implements ChildEventListener {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.i(TAG, "childAdded " + dataSnapshot.toString());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.i(TAG, "childChanged " + dataSnapshot.toString());
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.i(TAG, "childRemoved " + dataSnapshot.toString());
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.i(TAG, "childMoved " + dataSnapshot.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i(TAG, "childMoved " + databaseError.getMessage());
}
}