Hello, I'm implementing firebase realtime database to my project but, I get emitter disposed everytime onDataChange() is called, and my UI is not rendering the new list content, here's my code, any suggestions ?
` @Override
public Observable> signalEntityList() {
Firebase myFirebaseRef = new Firebase("https://mydatabase.firebaseio.com/");
return Observable.create(emitter -> {
if (isThereInternetConnection()) {
myFirebaseRef.child("signal").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<SignalEntity> list = new ArrayList<>();
Iterable<DataSnapshot> snapshotIterable = snapshot.getChildren();
Iterator<DataSnapshot> iterator = snapshotIterable.iterator();
while (iterator.hasNext()) {
SignalEntity signalEntity = iterator.next().getValue(SignalEntity.class);
list.add(signalEntity);
}
emitter.onNext(list);
emitter.onComplete();
}
@Override
public void onCancelled(FirebaseError error) {
emitter.onError(new FirebaseException(error.getMessage()));
}
});
} else {
emitter.onError(new NetworkConnectionException());
}
});
}`
try like this:
public Observable<List<SignalEntity>> signalEntityList() {
Firebase myFirebaseRef = new Firebase("https://mydatabase.firebaseio.com/");
return Observable.create(emitter -> {
if (isThereInternetConnection()) {
myFirebaseRef.child("signal").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<SignalEntity> list = new ArrayList<>();
for(DataSnapshot child : snapshot.getChildren()){
list.add(child.getValue(SignalEntity.Class));
}
emitter.onNext(list);
}
@Override
public void onCancelled(FirebaseError error) {
emitter.onError(new FirebaseException(error.getMessage()));
}
});
} else {
emitter.onError(new NetworkConnectionException());
}
});
}
Hello @stavelmashally ,
Actually, I figured it out now, basically I call emitter.onComplete() on onDataChange, so emitter gets disposed, and your answer is correct, thank you very much for your correct response. have a nice day.
@adnbal89 you may close the issue then.
Most helpful comment
try like this: