请求
在示例中有提到,我们把请求根据请求方法的不同,分为了Url类请求和Body类请求。
在Kalle中,有一个Request
基类,它有两个直接子类,一个UrlRequest
,另一个是BodyRequest
,它们分别根据Url类请求和Body类请求的不同特点实现了的Request
基类规定的抽象方法。
UrlRequest
和BodyRequest
是最基本的子类了,使用它们发起请求后,我们可以得到Response,这两个类的使用在拦截器中也有示例。
UrlRequest
有一个直接子类是SimpleUrlRequest
,BodyRequest
有一个直接子类是SimpleBodyRequest
。SimpleUrlRequest
和SimpleBodyRequest
只是实现了缓存,并且把服务器的响应流转为byte[]
,因此它们可以支持异步,在Android开发中,这二者是我们使用频率最高的两个类。不过由于Kalle提供的链式调用的Api,在实际开发中我们并不会直接使用SimpleUrlRequest
和SimpleBodyRequest
这两个类,具体用法详见示例。
UrlRequest
对于Url类请求,需要构建UrlRequest
,例如下面这段代码构建的UrlRequest
,最终的url
是http://www.example.com?name=kalle&password=123
:
Url.Builder url = Url.newBuilder("http://www.example.com");
UrlRequest urlRequest = UrlRequest.newBuilder(url, RequestMethod.GET)
.param("name", kalle)
.param("password", 123)
.build();
开发者也可以直接同步执行UrlReuqest
来获取Response
对象:
Url.Builder url = Url.newBuilder("http://www.example.com");
UrlRequest urlRequest = UrlRequest.newBuilder(url, RequestMethod.GET)
.param("name", kalle)
.param("password", 123)
.build();
Response response = new Call(urlRequest).execute();
相关类使用参考:
BodyRequest
BodyRequest
的用法和UrlRequest
基本是完全一致的:
Url.Builder url = Url.newBuilder("http://www.example.com");
BodyRequest bodyRequest = BodyRequest.newBuilder(url, RequestMethod.GET)
.param("name", kalle)
.param("password", 123)
.build();
可以简单的理解为换了个单词,不过BodyRequest
还可以添加url
参数和Binary
参数。
例如下面这段代码,最终的url
是http://www.example.com?name=kalle&age=18
,但是RequestBody
中也会发送sex=1&height=180cm
:
Kalle.post("http://www.example.com")
.urlParam("name", "kalle")
.urlParam("age", 18)
.param("sex", 1)
.param("height", "180cm")
.perform(...);
我们注意到,BodyRequest
通过urlParam()
添加的参数会拼接在url
中,而通过param()
方法添加的参数会通过RequestBody
发送。