Android 之 Retrofit 入门介绍

来源:互联网 发布:音频频谱分析软件 编辑:程序博客网 时间:2024/05/19 04:53

一、概述

     最近开始接触 Rerofit,它跟其他的网络请求框架如 Andoid Async Http、Volley、OKHttp 一样,都封装了底层的网络请求,仅暴露出一些对开发者来说调用简单的接口。而 Retrofit 底层就集成了 OKHttp。Retrofit 是一套 REST 架构的 Android 网络请求框架,基于注解,提供 JSON to POJO、POJO to JSON, 网络请求封装。
     通过注解的方式,我们可以快速完成一个网络请求,包括:GET、POST、DELETE、PUT。这样可以简化我们的开发流程,提高我们项目的开发速率。
     由于现在 Retrofit 的版本是 2.0.0-beta2,与之前的版本相比,新版 Retrofit 的 API 接口做出了较大的改动。而网上的 Blog 和 Demo 大多数是针对低版本的,只能说具有参考价值,但缺乏实用性。借着这几天的学习,我将以一个小Demo作为入口,逐步介绍 Retrofit 的基本用法,并也会记录我在这过程中所遇到的问题。
二、实战
     在使用 Retrofit 之前,我们首先要导入 Jar 包。
     针对 Eclipse 开发环境,添加 Jar 包的过程在这里我就不做详细介绍了,网上一抓一大把。
     针对 Android Studio 开发环境,个人很喜欢这个开发工具。各种快捷键的配置,大大提高你的开发效率。现在大多数开发者也慢慢的转移到这个工具上进行开发。对于熟悉 Eclipse 的朋友来说这个过程可能不适应,但本人还是推荐使用这个开发工具。使用 Android Studio 来开发 Android 应用,因为其本身就集成了 Gradle 这个构建工具,所以添加第三方类库就很方便了。详情如下:
     选择项目的 app 模块,找到 build.gradle 这个文件,打开后在 dependences 节点上添加第三方类库:
<span style="white-space:pre"></span>dependences {               ...               compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'          }

     同步一下就可以在该工程里使用 Retrofit 了。
     Retrofit 可以将你的 Http 请求仅需通过在Java 接口方法上添加相应的注解就可以实现。
public interface GitHubService {             @GET("/users/{user}")             Call<User> getUser(@Path("user") String user);        }

   然后通过 Retrofit 类来生成该接口的实现类。
Retrofit retrofit = new Retrofit.Builder()                                   .baseUrl("https://api.github.com")                                   .build();        GitHubService service = retrofit.create(GitHubService.class);
          
   接下来就是发送 HTTP 请求了。
<span style="white-space:pre"></span>Call call = service.getUser("userName);      <span style="white-space:pre"></span>call.enqueue(new Callback<User>(){          @override          public void onResponse(Response<User> response) {               User model = response.body();               if (model == null) {                    ResponseBody responseBody = response.errorBody();                    if (responseBody != null) {                         try {                              System.out.println("Error : " + responseBody.string();                         } cartch (Exception e) {                              e.printStackTrace();                         }                    }               } else {                    System.out.println("User : " + user.toString());               }          }                    @override          public void onFailure(Throwable t) {               System.out.println("Failure : " + t.getMessage());          }     });

     注意:因为涉及到网络请求,所以要在 AndroidManifest.xml 配置清单文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
        
     同时,由于在 Android 4.0 以上系统在UI线程上执行网络请求会阻塞主线程,因此我们要开启一个子线程来执行网络请求:
new Thread() {               @override               public void run() {                    // 将上面的 call.enqueue() 代码放在此处执行;杜宇要在请求结束后刷新 UI,则要结合一下 Handler.               }          }.start();

     User 实体类:
public class User {
          private String login;
          private Integer id;
          private String avatarUrl;
          private String gravatarId;
          private String url;
          private String htmlUrl;
          private String followersUrl;
          private String followingUrl;
          private String gistsUrl;
          private String starredUrl;
          private String subscriptionsUrl;
          private String organizationsUrl;
          private String reposUrl;
          private String eventsUrl;
          private String receivedEventsUrl;
          private String type;
          private Boolean siteAdmin;
          private String name;
          private String company;
          private String blog;
          private String location;
          private String email;
          private Boolean hireable;
          private Object bio;
          private Integer publicRepos;
          private Integer publicGists;
          private Integer followers;
          private Integer following;
          private String createdAt;
          private String updatedAt;
          // 对应的 get/set 方法
     }

     至此,一个关于 Retrofit 的简单例子就完成了。当然,Retrofit 提供的 API 功能还有很多,这也是我接下来要学习的。欢迎有兴趣的朋友一起交流、探讨。
    源码实例:RetrofitTest
0 0
原创粉丝点击