HTTPリクエストの生成は、アーティファクトRxHttp 30秒を開始しました

前菜には
、次のように、GETリクエストを送信する方法を見て、30代のカウントダウンが始まり、あまり話をしませんでした。

RxHttp.get("http://...")  //第一步,确定请求类型,这里为Get请求           
    .asString()           //第二步,确定返回类型,这里返回String类型      
    .subscribe(s -> {     //第二步,订阅观察者,第二步返回Observable对象
        //请求成功                                         
    }, throwable -> {                                  
        //请求失败                                         
    });                                                

[OK]を、カウントダウン!これで、あなたはRxHttpの本質を学びました。
はい、間違いなく、私たちが要求三部作を呼び出し、RxHttp、すべての要求、任意の戻り値のデータ型を使用しての3つの手順に従うことが非常にシンプルではありません。

三回言うべき重要なこと
の要求、任意の戻り値のデータ型は、リクエストの三部作に従うことをしています

任意の要求、任意の戻り値のデータ型は、要求トリロジーに従うことをしています

任意の要求、任意の戻り値のデータ型は、要求トリロジーに従うことをしています


Gradleの依存性

implementation 'com.rxjava.rxhttp:rxhttp:1.0.8'
//注解处理器,生成RxHttp类,即可一条链发送请求
annotationProcessor 'com.rxjava.rxhttp:rxhttp-compiler:1.0.8'

それは、プロジェクトでアノテーションを使用する必要があり、RxHttpクラスは自動的に注釈プロセッサによって生成され、そしてそれは、生成することができますRxHttp投影し再構築します。注意してください。

トリロジー解説

私はここで多くの人が疑問を持っていると信じて

  • 私はそのようなポスト要求それとして、他の方法で送信したい場合は?
  • ファイルのアップロードとダウンロードは、それの進行状況を監視しますか?
  • 私は、カスタムデータがそれをタイプ取得したいですか?

彼らは三部作を通してそれを実現する方法は?上のあなたのための1に続いて、心配しないで
、最初のステップの方法は、要求されたかを決定するために
上記の例を、我々は(「RxHttp.getを呼び出すHTTP:// ...」)オペレータは、コードGETリクエストを取得します文。したがって、我々はPOSTリクエストのみを投稿するオペレーターを呼び出す必要が送る、推測することができます。しかし、我々は半分しかそれを得た、なぜあなたがそれを言うのですか?POSTリクエストは、我々は一般的に、二つのタイプに分けポストフォームの一つの形態、および他のポストのJSON文字列です。この目的のために、RxHttp演算子は二つの伝送POSTリクエストを提供し、postForm postJosnあり、この時点で、我々はこの要求ポストを送信することができます

RxHttp.postForm("http://...")  //发送表单形式的Post请求           
    .asString()                //返回String类型      
    .subscribe(s -> {          //订阅观察者,
        //请求成功                                         
    }, throwable -> {                                  
        //请求失败                                         
    });  

RxHttp.postJson("http://...")  //发送Json字符串单形式的Post请求           
    .asString()                //返回String类型      
    .subscribe(s -> {          //订阅观察者,
        //请求成功                                         
    }, throwable -> {                                  
        //请求失败                                         
    });    

あなたがリクエストを送信する場合はそうでない場合は削除し、次のように、同様など、置きます:

RxHttp.deleteForm("http://...")
RxHttp.deleteJson("http://...")
RxHttp.putForm("http://...")
RxHttp.putJson("http://...")
//其它请求方式同上

最後に、我々は次のように我々は、要求方法を提供RxHttp、見て:
HTTPリクエストの生成は、アーティファクトRxHttp 30秒を開始しました

これは取得するには、既に上述postForm、postJson、他の同じトークンが、物語はもはやありません。
パラメータまたは画像メッセージを追加する方法を決定する方法を要求?そう簡単!!!、単に、以下に、のaddHeaderを追加呼び出します。

RxHttp.postForm("http://...")  //发送表单形式的Post请求     
    .add("key","value")        //添加请求参数,该方法可调用多次                 
    .addHeader("headerKey","headerValue")  //添加请求头参数,该方法可调用多次 
    .asString()                //返回String类型      
    .subscribe(s -> {          //订阅观察者,
        //请求成功                                         
    }, throwable -> {                                  
        //请求失败                                         
    }); 

戻り値のデータ型決定する第2ステップ
次のように戻り列タイプStringのasStringオペレータ代表上記をRxHttpは、asXXXオペレータ17を設け:
HTTPリクエストの生成は、アーティファクトRxHttp 30秒を開始しました
前記asBoolean、asInteger、asLongは、等asString、Iは、十分に理解されるようにするリターンであります梱包タイプの基本的なタイプが、これは説明するのはあまりないです。ここでは、ルックasObjectに焦点を当て、asListは、これらの3つの演算子をasDownload。
asObjectの
次のように表示開発は、我々はそのような私たちは、このケースをしたい学生対象として複数のカスタムデータ型を返す、我々は、asObject演算子を使用することができます。

RxHttp.get("http://...")       //发送Get请求         
    .asObject(Student.class)   //指定返回User类型数据 
    .subscribe(student -> {    //订阅观察者,
        //请求成功,这里student就是Student对象                                         
    }, throwable -> {                                  
        //请求失败                                         
    });  

asList
しかし、私たちは学生の一連のオブジェクトを取得したい場合は?次のように使用asObjectは明らかに動作しません、我々は、オペレータasList使用する必要があります。

RxHttp.get("http://...")        //发送Get请求         
    .asList(Student.class)      //指定返回User类型数据 
    .subscribe(students -> {    //订阅观察者,
        //请求成功,这里students就是List<Student>对象                                         
    }, throwable -> {                                  
        //请求失败                                         
    });  

注:asXXX演算子指定したデフォルトの内部実行要求Schedulers.io()のスレッド

asDownload
我々は次のように、この演算子を使用して、ファイルをダウンロードする必要があります。

 RxHttp.get("http://...")        //Get请求                         
     .asDownload(".../rxhttp.apk")  //使用asDownload操作符,并传入存储路径
     .subscribe(s -> {                                       
         //下载成功回调,s为文件存储路径                                   
     }, (OnError) throwable -> {                             
         //下载失败回调                                            
     });                                                     

第三步,订阅观察者
在上一步中,细心的你也许发现了,使用了asXXX操作符后,会返回一个Observable对象,那这个又是什么对象呢?其实它就是RxJava内部的Observable对象。
在这,可以告诉你,当我们调用asXXX操作符,拿到Observable对象后,RxHttp就已经完成了它的使命,接下来的事情都丢给了RxJava。拿到Observable对象,结合RxJava强大的操作符,我们可以做非常多的事情,比如我们想要在主线程回调观察者,如下:

RxHttp.get("http://...")        //发送Get请求         
    .asList(Student.class)      //指定返回User类型数据 
    .observeOn(AndroidSchedulers.mainThread())  //主线程回调观察者
    .subscribe(students -> {    //订阅观察者,
        //请求成功,这里students就是List<Student>对象                                         
    }, throwable -> {                                  
        //请求失败                                         
    });  

注:请求默认在Schedulers.io()线程执行,如未指定观察者所在线程,则默认在请求所在线程回调

小结

好了,请求三部曲就讲解结束,到这,你已经掌握了RxHttp 70% 的功能,并且掌握了RxHttp的精髓----请求三部曲,在任意请求中,就能做到以不变应万变。 本篇文章的目的在于提供一个简单的入门教程,更多功能请查看后续

问题简答

最后,借此机会,简单解答一下读者反馈的问题
1、RxHttp支持Https吗?
答:支持,RxHttp内置默认的OkHttpClient对象,如下:

new OkHttpClient.Builder()                                    
    .connectTimeout(10, TimeUnit.SECONDS)                     
    .readTimeout(10, TimeUnit.SECONDS)                        
    .writeTimeout(10, TimeUnit.SECONDS)                       
    .sslSocketFactory(sslSocketFactory, trustAllCert) //添加信任证书
    .hostnameVerifier((hostname, session) -> true) //忽略host验证 
    .build();                                                 

2、RxHttpは、キャッシングがそれを扱うサポートしていますか?
回答:必要に応じて、はい、しかし、RxHttpのデフォルトはOkHttpClientオブジェクトがキャッシュを開き、cacheControl(CacheControl cacheControl)キャッシュポリシー使用しているときRxHttpを使用して要求を送信カスタマイズし、任意のキャッシングをしない
3を、RxHttpがどのようにセッションをサポートするか、トークンには?
:特定のビジネス・ロジックを設計するトークンまたはセッションが、それは一時的なRxHttpパッケージ深度を行いません。必要に応じて、インターセプタを経由してオブジェクトOkHttpClientを達成するためにカスタマイズすることができます。
4、それkotlin RxHttpをサポートしていますか?
:依存注釈プロセッサではなくkapt AnnotationProcessorに要求されたときにサポートする必要がありますが、
5、どのようにマルチタスクリストのダウンロードサポートRxHttp
Aを:最新のデモ、既存のケースでは、デモ体験をダウンロードしてください。

おすすめ

転載: blog.51cto.com/14295695/2406886