当前位置: 首页 > 知识库问答 >
问题:

在RxJava中使用其他语句

东郭淇
2023-03-14

下面的代码只是检查null控件并生成mView。如果提供了所有条件,则handleUrl(数据)方法有效。

if( intent != null && intent.getExtras() != null ){
        String data = null;
        if( ( data = intent.getExtras().getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) ) != null ){
            mView.handleUrl( data );
        }
    }

当我将代码与RxJava一起使用时,我会在下面编写代码。

 Single.just( intent )
                .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
                .map( intent12 -> intent12.getExtras() )
                .filter( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA  ) != null )
                .map( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) )
                .subscribe( s -> mView.handleUrl( s ) );

我写的两个代码都工作相同。然而,当我尝试向代码中添加新条件时,问题就开始了。例如,如果intent为null,我可以创建一些新的操作符。

示例代码;

if( intent != null && intent.getExtras() != null ){
        String data = null;
        if( ( data = intent.getExtras().getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) ) != null ){
            mView.handleUrl( data );
        } else { // START Added a new condition
           mView.showError();
        }
    }

但是我不能使用RxJava过滤器方法编写这段代码。一旦过滤器返回false,操作就完成了。RxJava中添加新条件的解决方案是什么。

共有3个答案

张智
2023-03-14

尝试以下操作:-

Single.just( intent )
            .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
            .map( intent12 -> intent12.getExtras() )
            .map( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) )
            .map(string -> string == null ? "show_error" : string)
            .subscribe(new DisposableMaybeObserver<String>() {
                @Override
                public void onSuccess(String s) {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            })

onNext(字符串s){if(s.equalsIgnoreCase(“show\u error”)){//handle error}}}如下所示:-

.subscribe(new DisposableMaybeObserver<String>() {
                @Override
                public void onSuccess(String s) {
                     if (s.equalsIgnoreCase("show_error")) {
                      //handle error 
                    mView.showError();
                    }
                    else
                     {
                           mView.handleUrl( data );
                        }
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });

希望这有帮助。

孟智志
2023-03-14

要根据某些条件将一个可观察对象拆分为多个可观察对象,应使用groupBy操作符。

这是一个很好的例子。

在您的情况下,您不需要它,因为您想显示错误,并且Rx中有一个单独的错误机制。

你可以这样做:

Single.just( intent )
            .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
            .map( intent12 -> intent12.getExtras() )
            .flatMap( bundle -> 
              String imageData = bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA);
              if (imageData != null) {
                return Observanle.just(imageData); 
              } else {
                return Observable.error(new RuntimeException("something is wrong));
              }
            ).subscribe(s -> mView.handleUrl( s ),
                        error -> mView.showError( error ));
鲁辉
2023-03-14

作为该流的订阅者,您对两种情况感兴趣:数据是否为空和数据是否为空。这意味着,您不能像以前那样过滤出流。


    Single.just(sourceIntent)
            .map(intent -> {
                String data = "";
                Bundle bundle = intent.getExtras();
                if (bundle != null) {
                    data = bundle.getString(KEY, "");
                }
                return data;
            })
            .subscribe(data -> {
                if ("".equals(data)) view.showError();
                else view.handleUrl(data);
            });

 类似资料:
  • 我已经和flutter一起工作了几个月了,似乎在一个应用程序中没有太多关于后端或高级功能的工作。我喜欢使用Flutter来帮助我设计UI,但我想使用另一种语言来帮助我做一些其他的事情。例如,我想要显示一个全屏的相机页面(几乎像Snapchat一样),或者像通过App直接向另一个用户发送一条消息。我需要别的语言来做这样的事情吗?我不是高级程序员。我只想创建能够处理和存储一点点东西的简单应用程序。

  • 问题内容: 我对Java和Maven还是比较陌生的,但是我无法想象如果不使用Maven就开始一个新的Java项目。 我想提供一种人类可读的项目模型的想法在许多语言中都是普遍希望的。当您的应用程序依赖大量外部库时,尤其如此。 是否有其他任何项目管理或针对Java以外的语言的构建工具,这些语言本质上与Maven相似;也就是说,是否为项目维护者提供了一种机制来指定依赖关系和构建顺序? 问题答案: 这是我

  • 1. 安装protoc命令 下载地址https://github.com/google/protobuf/releases 根据自己系统对应下载 2.安装php protocbuf扩展 通过pecl方式安装 VERSION 目前最新版本为3.5.1.1 sudo pecl install protobuf-3.5.1.1 3.创建test.proto文件 在项目根目录创建Protobuf/Src目

  • 问题内容: 什么语言用于构建c ++和java等底层语言? 您怎么能没有语言地建立第一语言? 问题答案: 在编译器的上下文中,此操作通常称为bootstrapping。特别是,请参阅“鸡肉和鸡蛋问题”部分,以直接找到您的问题。 非常 第一 编译器会一直手用汇编语言编写。如果您的下一个问题是“第一个汇编程序是怎么写的?” 那么答案是,第一个汇编器是用二进制机器代码手写的,并且可能带有前面板拨动开关。

  • 当使用缺乏原生Pact支持的语言来写服务提供者时,你仍然可以使用通用的Pact提供者端验证工具来验证是否满足契约。 通用Pact提供者验证 下面的设置简化了任何语言的Pact提供者端的验证过程。 特性: 验证发布到Pact Broker的Pact文件 在开发环境验证供测试用的本地Pact*.json文件 安装有Ruby环境以及sane的预先配置的Docker镜像,缺省为src / Rakefile