请求
在示例中有提到,我们把请求根据请求方法的不同,分为了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发送。