Невозможно передать текстовое значение из result.getContents () в myRef DatabaseReference для удаления соответствующего ключа. - PullRequest
0 голосов
/ 10 октября 2019

Это мой второй вопрос, и спасибо заранее.

Проблема в основном заключается в невозможности передать значение поля 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());
   }
}

1 Ответ

0 голосов
/ 10 октября 2019

Вы, похоже, пытаетесь получить значение текстового поля в виде строки:

private EditText qrCode

Вызов String.valueOf(qrCode) просто преобразует сам EditText в строку, а не в ее значение.

Чтобы получить значение из текста редактирования:

qrCode.getText().toString()

Так, например:

DatabaseReference myRef = database.getReference(qrCode.getText().toString())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...