Android 如何检查可观测数据中的空数组?

Android 如何检查可观测数据中的空数组?,android,rx-java,rx-android,Android,Rx Java,Rx Android,我对android的rxJava有问题。我花了很多时间来解决我的问题,大约有一天,但找不到答案。关于我的问题。我有一个对数据库的查询,我想检查一个空数组,并在订阅服务器中显示一条关于此的消息。是的,我能做到,但我认为有更好的解决办法。在这篇文章中,我发现了类似的问题,但这个操作符不适合我。 这是我的可观察和订阅代码 private void getCategory(){ observable = Observable.create(new Observable.OnSubscribe&l

我对android的rxJava有问题。我花了很多时间来解决我的问题,大约有一天,但找不到答案。关于我的问题。我有一个对数据库的查询,我想检查一个空数组,并在订阅服务器中显示一条关于此的消息。是的,我能做到,但我认为有更好的解决办法。在这篇文章中,我发现了类似的问题,但这个操作符不适合我。 这是我的可观察和订阅代码

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);
}
private void getCategory(){
observable=observable.create(newobservable.OnSubscribe()){
@凌驾

公用无效呼叫(用户您可以只使用
过滤器
操作符,而不是
开关ifempty

.filter(result -> {
    if(result.size() > 0){
        return true;
    } else {
        //Show your toast here
        return false;
    }
})

switchIfEmpty
无法按照您建议的方式工作。它没有任何关于项目是列表或如何获取其大小的信息。操作员名称中的单词“empty”表示一个空流,这意味着它将从可观察的备份中发射项目(您的空发射)只有当原始流中没有排放和onComplete调用时,而不是当排放列表为空时。

Ouh,谢谢,这是帮助我的)你知道我的解决方案不起作用的原因吗?我编辑了我的答案,以便更好地解释你的解决方案不起作用的原因。如果你已经解决了问题,请将答案标记为已接受,以便其他人知道你不再需要帮助使用无关操作污染
过滤器
身体不是一个好主意(toast)考虑使用<代码> DOONEXTATE/<代码> >代码>过滤器> /代码>检查结果是否为空,如果有,则显示烤面包。