Ich habe Probleme mit rxJava für Android. Ich verbringe viel Zeit, um mein Problem zu lösen, etwa einen Tag, aber ich kann keine Antwort finden. Über meine Frage. Ich habe eine Abfrage an die Datenbank und ich möchte ein leeres Array überprüfen und ich zeige eine Nachricht über das im Abonnenten. Ja, ich kann das, aber ich denke, es gibt eine bessere Lösung. In dieser answer fand ich ähnliche Frage, aber dieser Operator funktioniert nicht für mich. Hier ist mein Code beobachtbarer und TeilnehmerWie überprüft man ein leeres Array in der Observablen?
private void getCategory(){
observable = Observable.create(new Observable.OnSubscribe<PaginatedScanList<ProductDO>>() {
@Override
public void call(Subscriber<? super PaginatedScanList<ProductDO>> subscriber) {
final Map<String, AttributeValue> filterExpressionAttributeValues = new HashMap<>();
filterExpressionAttributeValues
.put(":val1", new AttributeValue().withS(category));
final DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
.withFilterExpression("category = :val1")
.withExpressionAttributeValues(filterExpressionAttributeValues);
PaginatedScanList<ProductDO> result = dynamoDBMapper.scan(ProductDO.class, scanExpression);
Log.d(TAG, "response size is " + result.size());
subscriber.onNext(result);
subscriber.onCompleted();
}
}).switchIfEmpty(Observable.create(subscriber -> subscriber.onNext(null)));
subscriber = new Subscriber<ProductDO>() {
@Override
public void onCompleted() {
loadCategoryProduct.setVisibility(View.INVISIBLE);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
Toast.makeText(getActivity(), "something went wrong, please restart app", Toast.LENGTH_SHORT).show();
getActivity().onBackPressed();
}
@Override
public void onNext(ProductDO productDO) {
if (productDO == null)
Toast.makeText(getActivity(), "No item in this category", Toast.LENGTH_SHORT).show();
else {
productItem.add(productDO);
adapter.notifyDataSetChanged();
Log.d(TAG, "result category " + productDO.getName());
}
}
};
observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(product -> Observable.from(product))
.subscribe(subscriber);
}
Bitte helfen Sie mir, ich weiß nicht, warum switchIfEmpty nicht oder vielleicht funktioniert ich etwas falsch mache. Danke im Voraus.
Ouh, danke, wird es mir helfen) Sind Sie wissen, warum nicht meine Lösung arbeiten? –
Ich habe meine Antwort bearbeitet, um besser zu erklären, warum Ihre Lösung nicht funktioniert hat. Wenn Sie das Problem gelöst haben, markieren Sie bitte die Antwort als angenommen, so dass andere wissen Sie nicht mehr Unterstützung – koperko
Dank brauchen, werde ich Ihre Antwort als richtig –