Ошибка Android Studio Попытка вызвать виртуальный метод при чтении данных из firebase - PullRequest
0 голосов
/ 17 июня 2020

Я следую руководству 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) {

        }
    });
}

Этот код используется для чтения и нескольких кнопок под текстовым окном. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 17 июня 2020

Один из «FirebaseDatabase.getInstance (). GetReference (). Child (....)» возвращает NULL. Похоже на метод "readsensor ()". Пожалуйста, проверьте, заполнено ли "значение" правильной строкой, прежде чем использовать его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...