前菜には
、次のように、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、見て:
これは取得するには、既に上述postForm、postJson、他の同じトークンが、物語はもはやありません。
パラメータまたは画像メッセージを追加する方法を決定する方法を要求?そう簡単!!!、単に、以下に、のaddHeaderを追加呼び出します。
RxHttp.postForm("http://...") //发送表单形式的Post请求
.add("key","value") //添加请求参数,该方法可调用多次
.addHeader("headerKey","headerValue") //添加请求头参数,该方法可调用多次
.asString() //返回String类型
.subscribe(s -> { //订阅观察者,
//请求成功
}, throwable -> {
//请求失败
});
戻り値のデータ型決定する第2ステップ
次のように戻り列タイプStringのasStringオペレータ代表上記をRxHttpは、asXXXオペレータ17を設け:
前記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を:最新のデモ、既存のケースでは、デモ体験をダウンロードしてください。