Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RxJava和Observable上的改型API调用_Android_Rx Java_Android Livedata - Fatal编程技术网

Android RxJava和Observable上的改型API调用

Android RxJava和Observable上的改型API调用,android,rx-java,android-livedata,Android,Rx Java,Android Livedata,我是RxJava新手,想了解可观察的。因此,我使用改造进行了一次API调用,并观察结果的变化,因此我的问题是: 它是否进行持续API调用以从服务器获取最新结果 如果是,那么它多久打一次电话 是一次电话吗?那么观察数据有什么用呢 如果只调用一次,那么我们应该使用RxJava来保存代码中的几行代码吗?在这种情况下,我们可以简单地使用实时数据 它是否在活动的每个生命周期调用一次,即(如果活动被终止并再次打开,那么它将获取新结果?) 以下是一段代码片段: // fetching list of reci

我是RxJava新手,想了解可观察的。因此,我使用改造进行了一次API调用,并观察结果的变化,因此我的问题是:

  • 它是否进行持续API调用以从服务器获取最新结果
  • 如果是,那么它多久打一次电话
  • 是一次电话吗?那么观察数据有什么用呢
  • 如果只调用一次,那么我们应该使用RxJava来保存代码中的几行代码吗?在这种情况下,我们可以简单地使用实时数据
  • 它是否在活动的每个生命周期调用一次,即(如果活动被终止并再次打开,那么它将获取新结果?)
  • 以下是一段代码片段:

    // fetching list of recipes
     mRecipeListViewModel.getRecipes().observe(this, new Observer<List<Recipe>>() {
                @Override
                public void onChanged(@Nullable List<Recipe> recipes) {
                    // showing list of recipes
                }
            });
    
    //获取配方列表
    mRecipeListViewModel.getRecipes().observe(这是一个新的观察者(){
    @凌驾
    更改后的公共void(@Nullable List recipes){
    //显示食谱列表
    }
    });
    
    那是。。。有很多问题

  • 答案是“视情况而定”。 显示您的服务类别(定义改装呼叫的位置)。 改型调用通常是
    Single
    而不是
    Observable
    ,因为API将返回结果并结束调用,因此在该场景中使用Observable没有任何意义(Single就是…一个结果或错误)

  • 一次:)

  • 当您期望所述可观察对象(通过onNext)发出值时,您可以观察一个可观察对象,这样您就可以观察一个事物列表,并将其项逐个发出(例如)。或者你可以有一个API,它是一个开放的套接字,时不时地发射项目;RXJava可以帮助您订阅上述排放并处理每个项目(onNext()…)

  • 如果您不使用RxJava,我会使用LiveData;RX很好,但它很大,如果yopu所做的只是调用改造单一API,我个人不会为RX费心。RX的力量来自众多(有时无法理解或使用)操作员(地图、平面地图、开关等)。和它的超流体API。它可以做非常强大的事情,并且有许多为它编写的适配器和扩展。它也可能被误用到地狱。这是一个中等先进的工具,用于非常好的目的,我今天不会使用它,除非我有一个Rx真正擅长的特定用例

  • 这与RX无关,更与您的架构有关。您是否在您的生命周期方法中调用改型?(像onStart?)或者在用户交互时调用它(例如按下按钮)。在这两种情况下,RX都与之无关,除非被告知,否则不会打电话给任何人

  • 更多信息
    • 如果您有一个API,它返回一个“
      事物
      ”列表,比如
      列表
      ,您可能会认为它在您的服务类中是
      可观察的getThings()
      。那就行了。但这不是它的工作原理;API可能会发送一个数组(这就是为什么它是一个列表),所以实际上,它必须看起来像
      Observable getThings()
      ,所以当您订阅时,它看起来像(这是伪代码):
    订阅将有3种方法:

    onError
    onNext
    onComplete

    如果你看
    OnNext
    它看起来像
    OnNext(列出事物)
    那么,从可观测到的每一个发射,都是一个列表,而不是你最初认为的:“
    OnNext(事物)
    这样你就可以将
    事物
    添加到列表中

    这不是它的工作方式。如果您的API返回一个事物列表…您可能希望将其声明为:

    Single
    ,因为您的订阅基本上有2种方法,而不是3种:

    onError
    onSuccess(列出事物)
    (如果名称不是100%准确,我表示歉意,我已经好几年没有接触过RX了)。因此,API要么返回列表,要么返回错误,没有空值,没有下一个,没有完整;一旦获得列表,您的订阅将不再发出


    我希望这能帮助您更好地理解使用RxJava意味着什么(这是一项承诺!)

    当然,我添加了更多信息,以防您想更好地理解单个与可观察的区别。
    api.getThing()
        .blah()
        .blah()
        .subscribe(...)