Reputation: 1
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.
Upvotes: 0
Views: 69
Reputation: 397
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.
Upvotes: 1
Reputation: 1066
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.
Upvotes: 1