Я следую руководству YouTube, чтобы читать базу данных в реальном времени из firebase. Дочернее значение отправляется с намерением со страницы входа на главную страницу. В коде нет ошибки, вместо этого я получил ошибку, как показано ниже, при попытке открыть главную страницу.
java .lang.RuntimeException: невозможно запустить действие ComponentInfo {com.example.project / com .example.project.MainActivity}: java .lang.NullPointerException: попытка вызвать виртуальный метод com.google.firebase.database.ValueEventListener com.google.firebase.database.DatabaseReference.addValueEventListener (com.google.firebase.database .ValueEventListener) 'для ссылки на нулевой объект
для кода ниже
Button tambah, panggil, admin;
DatabaseReference reff;
public static final String TAG = "gakpenting";
private RecyclerView mRecyclerView;
private List<sensor> sensors = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
String value = intent.getExtras().getString("kode");
reff = FirebaseDatabase.getInstance().getReference().child(value);
mRecyclerView = (RecyclerView) findViewById(R.id.recycleview_sensor);
new MainActivity().readsensor(new datastatus() {
@Override
public void DataIsLoaded(List<sensor> sensors, List<String> keys) {
new RecyclerView_Config().setConfig(mRecyclerView, MainActivity.this, sensors, keys);
}
@Override
public void DataIsInserted() {
}
@Override
public void DataIsUpdated() {
}
@Override
public void DataIsDeleted() {
}
});
tambah = (Button) findViewById(R.id.tambah);
tambah.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openaddmember();
}
});
admin = (Button) findViewById(R.id.admin);
admin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openadmin();
}
});
panggil = (Button) findViewById(R.id.panggil);
panggil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
reff = FirebaseDatabase.getInstance().getReference().child("damkar");
reff.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
String damkar = dataSnapshot.getValue(String.class);
Intent callintent = new Intent(Intent.ACTION_CALL);
callintent.setData(Uri.parse("tel:" + damkar));
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
startActivity(callintent);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
});
}
public void openaddmember() {
Intent child = getIntent();
String value = child.getExtras().getString("kode");
Intent intent = new Intent(this, statalat.class);
intent.putExtra("kode", value);
startActivity(intent);
}
public void openadmin() {
Intent intent = new Intent(this, statalat.class);
startActivity(intent);
}
public interface datastatus {
void DataIsLoaded(List<sensor> sensors, List<String> keys);
void DataIsInserted();
void DataIsUpdated();
void DataIsDeleted();
}
public void readsensor(final datastatus Datastatus) {
Intent intent = getIntent();
String value = intent.getExtras().getString("kode");
reff = FirebaseDatabase.getInstance().getReference().child(value);
reff.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
sensors.clear();
List<String> keys = new ArrayList<>();
for (DataSnapshot keynode : dataSnapshot.getChildren()) {
keys.add(keynode.getKey());
sensor Sensor = keynode.getValue(sensor.class);
sensors.add(Sensor);
}
Datastatus.DataIsLoaded(sensors, keys);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Этот код используется для чтения и нескольких кнопок под текстовым окном. Пожалуйста, помогите.