Я пытаюсь установить ListView
внутри моего Fragment
. Я получаю данные от Firebase, которые я установил для своего ListView
. В моей базе данных Firebase у меня есть родительский узел patients
, у которого есть дочерние узлы, такие как patient1
, patient2
и т. Д., И каждый элемент в моем ListView
представляет одного пациента. Мой ListView
всегда будет иметь максимум 2 элемента, поскольку я устанавливаю свой список с двумя лучшими пациентами из базы данных Firebase. Всякий раз, когда новый пациент добавляется или удаляется, я хочу, чтобы мой listView
обновился с новыми данными пациента. Но когда новый пациент добавлен, мое приложение разбивается.notifyDataSetChanged() вызывает NullPointerException при изменении данных списка, которые извлекаются из firebase
Logcat исключение: -
01-10 14:20:20.966 17863-17863/com.abc.tempapp/AndroidRuntime: FATAL EXCEPTION: main
01-10 14:20:20.966 17863-17863/com.abc.tempapp E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
Код: -
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
...
setListView();
...
}
public void setListView()
{
Firebase.setAndroidContext(context);
firebaseData = new Firebase("https://xyz.firebaseio.com");
firebaseData.child("patients").orderByChild("appointment-id").limitToFirst(2).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
patientList.clear();
for (DataSnapshot tempSnapshot : dataSnapshot.getChildren()) {
int tempId = Integer.parseInt(tempSnapshot.child("appointment-id").getValue().toString());
String tempContact = tempSnapshot.child("number").getValue().toString();
String tempName = tempSnapshot.child("name").getValue().toString();
long tempTime = Long.parseLong(tempSnapshot.child("arrival-time").getValue().toString());
Patient patient = new Patient(tempId, tempContact, tempName, epochToDate(tempTime));
patientList.add(patient);
}
if (myAdapter == null) {
myAdapter = new MyAdapter(context, patientList);
listView.setAdapter(myAdapter);
firebaseData.child("patients").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
dataChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
dataChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(FirebaseError firebaseError) {}
});
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {}
});
}
synchronized public void dataChanged()
{
Firebase.setAndroidContext(context);
firebaseData = new Firebase("https://xyz.firebaseio.com");
firebaseData.child("patients").orderByChild("appointment-id").limitToFirst(2).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
patientList.clear();
for (DataSnapshot tempSnapshot : dataSnapshot.getChildren()) {
int tempId = Integer.parseInt(tempSnapshot.child("appointment-id").getValue().toString());
String tempContact = tempSnapshot.child("number").getValue().toString();
String tempName = tempSnapshot.child("name").getValue().toString();
long tempTime = Long.parseLong(tempSnapshot.child("arrival-time").getValue().toString());
Patient patient = new Patient(tempId, tempContact, tempName, epochToDate(tempTime));
patientList.add(patient);
}
myAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(FirebaseError firebaseError) {}
});
}
Я не знаю, что я здесь отсутствует. Это может быть очень фундаментальная вещь, что я ошибаюсь, надеюсь, что кто-то меня исправит.
Отладка вашего кода и проверка вашего пациентаЛист возвращается как null. \ –
patientList не становится нигде, хотя patientList иногда может быть пустым, в этом случае в списке ничего не будет. –
java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String java.lang.Object.toString() 'на ссылке нулевого объекта вы возвращаетесь к объекту, который является нулевым, проверьте ваш объект 1-й, если его значение не равно null, тогда реализуйте свою логику в нем, например: if (object! = null) { что-то здесь делать}' –