风儿带你学习Retrofit2。从基础开始简单教程(一)。

前言

本人第一篇正经文章(不正经的文章没有发表出去),
本文中的Retrofit均指代Retrofit2.0。

任务:简单使用Retrofit2

Retrofit 是什么?

Retrofit 是一个用于 Android 和 Java 平台的类型安全的网络请求框架。Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,你看人家的产品(想想就开心)。
Retrofit在github上的地址:https://github.com/square/retrofit
先来点开胃小菜,提提神。上代码,

public interface GitHubService {
  @GET("users/{user}/repos")
  Call> listRepos(@Path("user") String user);
}

上面的代码就是Retrofit官网上面的源代码,如果照着源代码写就会出现Repo是干嘛的,一脸蒙蔽了。为了保持清醒上两张图。


风儿带你学习Retrofit2。从基础开始简单教程(一)。_第1张图片
retrofit1.png

点击retrofit-adapters进入的页面是长得如下:


风儿带你学习Retrofit2。从基础开始简单教程(一)。_第2张图片
retrofit2.png

点击retrofit-converters进入的页面是长得如下:


风儿带你学习Retrofit2。从基础开始简单教程(一)。_第3张图片
retrofit3.png

上面出问题的Repo就是和converters有关系了。那么我们来科普一下。
retrofit-adapters表示retrofit支持的适配器,举个例子想要支持RxJava就需要在代码中添加:addCallAdapterFactory(RxJavaCallAdapterFactory.create())。此处只是预热一下。后面我们会说到。
retrofit-converters从字面意思就看的出来转换器。没错就是它,
这个强大的库可以很简单的把返回的 JSON 或者 XML 数据解析成简单 Java 对象。GET, POST, PUT, PATCH, 和 DELETE 这些请求都可以执行。
对比上面的图片可以看到,JSON转换器是:Gson,Jackson,Moshi
对于 Protocol Buffers, 转换器是:Protobuf,Wire
对于 XML 解析, 转换器是:simplexml
对于 text/plain 解析,转行器是:scalars
那么上面的Repo就是java对象自己定义的对象。

1.创建一个 Android Studio 工程

打开 Android Studio,创建一个新工程(直接创建一个新的Module也是一样),然后创建一个命名为 MainActivity 的空白 Activity。


风儿带你学习Retrofit2。从基础开始简单教程(一)。_第4张图片
retrofit4.png

2.添加依赖库

创建好新的工程后,在我们的build.gradle(不是整个工程下的)中添加以下依赖。

    //Retrofit
    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    //Retrofit对应json的转换库
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'

3.添加网络权限

我们做的是网络请求,当然要有访问网络的权限。在我们应用的清单文件 AndroidManifest.xml 里面声明网络权限。

    

4.创建 API 接口

我们使用https://api.github.com/repos/square/retrofit/contributors 这个地址。新建一个APIGitHub类。我们使用的是ResponseBody,这是okhttp3里面的类,因为Retrofit2里面自动设置了okhttp的依赖,所以我们可以直接用。

public interface APIGitHub {
    @GET("repos/square/retrofit/contributors")
    Call getData();
}

GET 注解明确的定义了当该方法调用的时候会执行一个 GET 请求。接口里每一个方法都必须有一个 HTTP 注解,用于提供请求方法和相对的 URL。Retrofit 内置了 5 种注解:@GET, @POST, @PUT, @DELETE, 和 @HEAD。后面我们会讲到。

5.在我们的MainActivity中请求网络

直接上代码。

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com/")
                .build();
        APIGitHub apiGitHub = retrofit.create(APIGitHub.class);
        apiGitHub.getData().enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                if (response.isSuccessful()) {
                    String sting = null;
                    try {
                        sting = response.body().string();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    Log.e(TAG, "获得信息" + sting);
                } else {
                    Log.e(TAG, "获得信息错误");
                }
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                Log.e(TAG, "获得信息直接获得错误+" + t.toString());
            }
        });


    }

现在我们就得到具体的信息了。
以上就是简单的使用。然后发现现在的网络特别不好使,嗨这不是打消我的积极性么????。下一篇我们分析Retrofit详细的使用和转换器的使用。。请期待哦!!

你可能感兴趣的:(风儿带你学习Retrofit2。从基础开始简单教程(一)。)