当前位置: 代码迷 >> Android >> Android Studio下使用Retrofit开展网络请求
  详细解决方案

Android Studio下使用Retrofit开展网络请求

热度:34   发布时间:2016-04-28 00:52:48.0
Android Studio下使用Retrofit进行网络请求

环境要求

  • Android 2.3及以上版本
  • Java 6及以上版本

配置

  • GRADLE配置文件下添加引用
dependencies {    ...    compile 'com.squareup.retrofit:retrofit:1.9.0'    ...}
  • 当OkHttp存在时,Retrofit会使用OkHttp来进行网络请求,使用OkHttp的添加引用如下
dependencies {    ...compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'compile 'com.squareup.okhttp:okhttp:2.0.0'    ...}

发起请求

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

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

    interface User {        @GET("/user/list.json")        void getUsers(@Query("pagesize") int pagesize, Callback<String> callback);    }
  • @GET表明该请求为GET方式,[email protected], @PUT, @DELETE, [email protected],具体的作用请参考官方文档,由于篇幅原因,这里不再叙述。

  • @Query为参数声明

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

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

RestAdapter restAdapter = new RestAdapter.Builder()                .setEndpoint(CTX).setConverter(new BaseConverter())                .build();
  • setEndpoint方法指定了请求地址的前半部分,即服务器地址,如 https://api.github.com

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

public class BaseConverter implements Converter {    @Override    public Object fromBody(TypedInput body, Type type) throws ConversionException {        ByteArrayOutputStream baos = new ByteArrayOutputStream();        int i = -1;        String response = "";        try {            while ((i = body.in().read()) != -1) {                baos.write(i);            }            response = baos.toString();            baos.close();        } catch (IOException e) {            e.printStackTrace();        }        return response;    }    @Override    public TypedOutput toBody(final Object object) {        return new TypedOutput() {            @Override            public String fileName() {                return null;            }            @Override            public String mimeType() {                return "String";            }            @Override            public long length() {                return object == null ? 0 : object.toString().length();            }            @Override            public void writeTo(OutputStream out) throws IOException {                out.write(object.toString().getBytes());            }        };    }}

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

        Callback<String> callback = new Callback<String>() {            @Override            public void success(String s, Response response) {            }            @Override            public void failure(RetrofitError error) {            }        }        User user = getAdapter().create(User.class);        //指定请求参数和回调接口的实现类        user.getUsers(12,callback);
  • Retrofit的强大之处就在于此,它会给根据接口的方法注解来实现该接口

代码混淆

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

-dontwarn retrofit.**-keep class retrofit.** { *; }-keepattributes Signature-keepattributes Exceptions
  相关解决方案