简体   繁体   中英

Trying to get the value from the TextView and send it to the firebase reference but app is getting crashed

Trying to send the value to the firebase which was entered in the TextView and deleting it from the firebase realtimedatabase. But when trying to fetch the value from TextView qrCode its crashing the app.

I am trying to decleare the TextView var outside the onCreate but its crashing. Also can't integrate the TextView value in 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());
   }
}


Expected - The value of TextView should be send by the getRefrences.

To fix crash, you can write your code like this:

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();

        }
    });
}

Updated the code for qrCode.getText() as the 2nd answer mentioned it.

Add this code inside onCreate method of activity -

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()));

    }

and also use -

qrCode.getText() 

to get text of TextView.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM