AndroidStudio下使用Retrofit进行网络请求

  • 环境要求
    Android 2.3及以上版本 Java 6及以上版本
    配置
    GRADLE配置文件下添加引用
    1. <code class=" hljs r">
    2. dependencies {
    3. ...
    4. compile 'com.squareup.retrofit:retrofit:1.9.0'
    5. ...
    6. }
    7. </code>
    当OkHttp存在时,Retrofit会使用OkHttp来进行网络请求,使用OkHttp的添加引用如下 
    1. <code class=" hljs r">dependencies {
    2. ...
    3. compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
    4. compile 'com.squareup.okhttp:okhttp:2.0.0'
    5. ...
    6. }</code>
    发起请求

    下面的例子是使用Retrofit进行一次简单的异步GET请求,返回的值为String类型

    首先定义一个接口,在接口中声明一个方法来定义请求的相关内容

    1. <code class=" hljs d">    interface User {
    2. @GET("/user/list.json")
    3. void getUsers(@Query("pagesize"int pagesize, Callback<String> callback);
    4. }
    5. </code>

    @GET表明该请求为GET方式,除此之外还有@POST, @PUT, @DELETE, 和@HEAD,具体的作用请参考官方文档,由于篇幅原因,这里不再叙述。

    @Query为参数声明

    Callback< String > 为回调接口,String表明返回数据结果就为String类型

    然后创建一个RestAdapter对象,代码如下

    1. <code class=" hljs avrasm">RestAdapter restAdapter = new RestAdapter.Builder()
    2. .setEndpoint(CTX).setConverter(new BaseConverter())
    3. .build();</code>

    setEndpoint方法指定了请求地址的前半部分,即服务器地址,如 https://api.github.com

    setConverter方法需要一个转换接口的实现类作为参数,该类的作用是将请求得到的InputStream转换为想要的类型,示例代码如下

    01. <code class=" hljs java">public class BaseConverter implements Converter {
    02. @Override
    03. public Object fromBody(TypedInput body, Type type) throws ConversionException {
    04. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    05. int i = -1;
    06. String response = "";
    07. try {
    08. while ((i = body.in().read()) != -1) {
    09. baos.write(i);
    10. }
    11. response = baos.toString();
    12. baos.close();
    13. catch (IOException e) {
    14. e.printStackTrace();
    15. }
    16. return response;
    17. }
    18.  
    19. @Override
    20. public TypedOutput toBody(final Object object) {
    21. return new TypedOutput() {
    22. @Override
    23. public String fileName() {
    24. return null;
    25. }
    26.  
    27. @Override
    28. public String mimeType() {
    29. return "String";
    30. }
    31.  
    32. @Override
    33. public long length() {
    34. return object == null 0 : object.toString().length();
    35. }
    36.  
    37. @Override
    38. public void writeTo(OutputStream out) throws IOException {
    39. out.write(object.toString().getBytes());
    40. }
    41. };
    42. }
    43. }
    44. </code>

    当得到了一个restAdapter 对象后,调用restAdapter的create方法得到User接口的实现类

    01. <code class=" hljs java">        Callback<String> callback = new Callback<String>() {
    02. @Override
    03. public void success(String s, Response response) {
    04.  
    05. }
    06.  
    07. @Override
    08. public void failure(RetrofitError error) {
    09.  
    10. }
    11. }
    12. User user = getAdapter().create(User.class);
    13. //指定请求参数和回调接口的实现类
    14. user.getUsers(12,callback);</code>
    Retrofit的强大之处就在于此,它会给根据接口的方法注解来实现该接口
    代码混淆

    如果需要进行代码混淆,配置如下

    1. <code class=" hljs haml">-dontwarn retrofit.**
    2. -keep class retrofit.** { *; }
    3. -keepattributes Signature
    4. -keepattributes Exceptions</code>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值