简体   繁体   English

尝试从 TextView 获取值并将其发送到 firebase 参考,但应用程序正在崩溃

[英]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.尝试将值发送到 TextView 中输入的 firebase 并将其从 firebase 实时数据库中删除。 But when trying to fetch the value from TextView qrCode its crashing the app.但是当试图从 TextView qrCode中获取值时,它会使应用程序崩溃。

I am trying to decleare the TextView var outside the onCreate but its crashing.我正在尝试清除onCreate之外的 TextView var 但它崩溃了。 Also can't integrate the TextView value in database.getRefrence(String.valueOf(qrCode));也无法在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.预期 - TextView 的值应由 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.更新了 qrCode.getText() 的代码,因为第二个答案提到了它。

Add this code inside onCreate method of activity -在活动的 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()));

    }

and also use -并且还使用 -

qrCode.getText() 

to get text of TextView.获取 TextView 的文本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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