Java 正在尝试从TextView获取值并将其发送到firebase引用,但应用程序正在崩溃
尝试将在TextView中输入的值发送到firebase,并将其从firebase RealTime数据库中删除。但是当尝试从TextViewJava 正在尝试从TextView获取值并将其发送到firebase引用,但应用程序正在崩溃,java,android,firebase,firebase-realtime-database,textview,Java,Android,Firebase,Firebase Realtime Database,Textview,尝试将在TextView中输入的值发送到firebase,并将其从firebase RealTime数据库中删除。但是当尝试从TextViewqrCode获取值时,应用程序会崩溃 我试图在onCreate之外清除TextView变量,但是它崩溃了。也无法在数据库.getreference(String.valueOf(qrCode))中集成TextView值 package com.vidmun.dhananjay.qrscanner; 导入androidx.annotation.NonNull
qrCode
获取值时,应用程序会崩溃
我试图在onCreate
之外清除TextView变量,但是它崩溃了。也无法在数据库.getreference(String.valueOf(qrCode))中集成TextView值代码>
package com.vidmun.dhananjay.qrscanner;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.os.Bundle;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.firebase.database.ChildEventListener;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入org.w3c.dom.Text;
导入静态android.content.ContentValues.TAG;
公共类MainActivity扩展了AppCompatActivity{
私有静态最终字符串标记=MainActivity.class.getSimpleName();
//TextView qrCode=(EditText)findViewById(R.id.qrCode);
//向数据库写入消息
最终文本视图qrCode=(文本视图)findViewById(R.id.qrCode);
FirebaseDatabase=FirebaseDatabase.getInstance();
DatabaseReference myRef=database.getReference(String.valueOf(qrCode));
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myRef.addChildEventListener(新的MyChildEventListener());
按钮删除=(按钮)findViewById(R.id.delete);
TextView qrCode=(TextView)findViewById(R.id.qrCode);
delete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
deleteValueFromDb();
//Toast.makeText(getApplicationContext(),“按下”,Toast.LENGTH_LONG.show();
}
});
}
public void deleteValueFromDb(){
//最终文本视图qrCode=(文本视图)findViewById(R.id.qrCode);
//final DatabaseReference myRef=database.getReference(String.valueOf(qrCode));
myRef.child(“0”).addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
dataSnapshot.getRef().removeValue();
Toast.makeText(getApplicationContext(),“可以吃”,Toast.LENGTH\u LONG.show();
}否则{
Toast.makeText(getApplicationContext(),“已经吃过”,Toast.LENGTH_LONG.show();
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
抛出databaseError.toException();
}
});
}
}
类MyChildEventListener实现ChildEventListener{
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
Log.i(标记“childAdded”+dataSnapshot.toString());
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
Log.i(标记“childChanged”+dataSnapshot.toString());
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
Log.i(标记“childRemoved”+dataSnapshot.toString());
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
Log.i(标记“childMoved”+dataSnapshot.toString());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.i(标记“childMoved”+databaseError.getMessage());
}
}
预期-TextView的值应由GetRefresents发送。要修复崩溃,您可以这样编写代码:
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()的代码,正如第二个答案所提到的。要修复崩溃,您可以这样编写代码:
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()的代码,因为第二个答案提到了它。在活动的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的文本。请在活动的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()
获取文本视图的文本。您可以在日志上发送错误吗?您可以在日志上发送错误吗?