请求

示例中有提到,我们把请求根据请求方法的不同,分为了Url类请求和Body类请求。

在Kalle中,有一个Request基类,它有两个直接子类,一个UrlRequest,另一个是BodyRequest,它们分别根据Url类请求和Body类请求的不同特点实现了的Request基类规定的抽象方法。

UrlRequestBodyRequest是最基本的子类了,使用它们发起请求后,我们可以得到Response,这两个类的使用在拦截器中也有示例。

UrlRequest有一个直接子类是SimpleUrlRequestBodyRequest有一个直接子类是SimpleBodyRequestSimpleUrlRequestSimpleBodyRequest只是实现了缓存,并且把服务器的响应流转为byte[],因此它们可以支持异步,在Android开发中,这二者是我们使用频率最高的两个类。不过由于Kalle提供的链式调用的Api,在实际开发中我们并不会直接使用SimpleUrlRequestSimpleBodyRequest这两个类,具体用法详见示例

UrlRequest

对于Url类请求,需要构建UrlRequest,例如下面这段代码构建的UrlRequest,最终的urlhttp://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参数。

例如下面这段代码,最终的urlhttp://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发送。

results matching ""

    No results matching ""