Попытка получить значение из TextView и отправить его в ссылку на Firebase, но приложение падает - PullRequest
0 голосов
/ 10 октября 2019

Попытка отправить значение в базу данных firebase, которое было введено в TextView, и удалить его из базы данных базы данных firebase. Но при попытке получить значение из TextView qrCode происходит сбой приложения.

Я пытаюсь объявить переменную TextView вне onCreate, но при этом происходит сбой. Также не может интегрировать значение TextView в database.getRefrence(String.valueOf(qrCode));

package com.vidmun.dhananjay.qrscanner;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

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 org.w3c.dom.Text;

import static android.content.ContentValues.TAG;


public class MainActivity extends AppCompatActivity {
   private static final String TAG = MainActivity.class.getSimpleName();
   //TextView qrCode = (EditText) findViewById(R.id.qrCode);
   // Write a message to the database

   final TextView qrCode = (TextView) findViewById(R.id.qrCode);
   FirebaseDatabase database = FirebaseDatabase.getInstance();
   DatabaseReference myRef = database.getReference(String.valueOf(qrCode));



   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       myRef.addChildEventListener(new MyChildEventListener());


       Button delete = (Button) findViewById(R.id.delete);
       TextView qrCode = (TextView) findViewById(R.id.qrCode);


       delete.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               deleteValueFromDb();
               //Toast.makeText(getApplicationContext() , "Pressed", Toast.LENGTH_LONG).show();

           }
       });
   }



   public void deleteValueFromDb(){
     //  final TextView qrCode = (TextView) findViewById(R.id.qrCode);
      // final DatabaseReference myRef = database.getReference(String.valueOf(qrCode));
       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());
   }
}


Ожидается - значение TextView должно быть отправлено getRefferences.

Ответы [ 2 ]

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

Добавьте этот код в метод действия onCreate -

private TextView qrCode;
private DatabaseReference myRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       qrCode = (TextView) findViewById(R.id.qrCode);
       FirebaseDatabase database = FirebaseDatabase.getInstance();
       myRef = database.getReference(String.valueOf(qrCode.getText()));

    }

, а также используйте -

qrCode.getText() 

, чтобы получить текст TextView.

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

Чтобы исправить ошибку, вы можете написать свой код следующим образом:

final TextView qrCode;
FirebaseDatabase database;
DatabaseReference myRef;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button delete = (Button) findViewById(R.id.delete);
    qrCode = (TextView) findViewById(R.id.qrCode);
    qrCode.setText("qr code value"); // get value of qr code and set here
    database = FirebaseDatabase.getInstance();
    myRef = database.getReference(String.valueOf(qrCode.getText()));
    myRef.addChildEventListener(new MyChildEventListener());

    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            deleteValueFromDb();
            //Toast.makeText(getApplicationContext() , "Pressed", Toast.LENGTH_LONG).show();

        }
    });
}

Обновлен код для qrCode.getText (), так как во втором ответе упоминалось об этом.

...