AndroidStudio下使用Retrofit进行网络请求

来源:互联网 发布:淘宝上如何申请换货 编辑:程序博客网 时间:2024/05/21 19:47
  • 环境要求

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

    配置

    GRADLE配置文件下添加引用
    view sourceprint?
    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的添加引用如下 
    view sourceprint?
    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类型

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

    view sourceprint?
    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对象,代码如下

    view sourceprint?
    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转换为想要的类型,示例代码如下

    view sourceprint?
    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接口的实现类

    view sourceprint?
    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的强大之处就在于此,它会给根据接口的方法注解来实现该接口

    代码混淆

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

    view sourceprint?
    1.<code class=" hljs haml">-dontwarn retrofit.**
    2.-keep class retrofit.** { *; }
    3.-keepattributes Signature
    4.-keepattributes Exceptions</code>

延伸阅读:

  • 1、android 获取网络图片方法 常见错误以及解决办法
  • 2、Android网络状态
  • 3、Android 下载网络文件
  • 4、Android Listview 分页 动态加载网络数据
  • 5、Android网络应用开发从零开始做起
  • 6、Android开发之APN网络切换
  • 7、android 网络编程学习
  • 8、Android作为客户端,PC作为服务端:实现网络通信
0 0
原创粉丝点击