4

Android网络请求(终) 网络请求框架Retrofit - 高同学,你好

 1 year ago
source link: https://www.cnblogs.com/nhgtx/p/16919310.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android网络请求(终) 网络请求框架Retrofit

Retrofit底层是由OkHttp封装的,Retrofit对于注解的使用十分频繁,所以不了解注解的同学们可以去查查资料什么的。

这里有一个小细节,要使用Retrofit至少需要jdk1.8以上和Android API 21以上

Android架构中的MVVM所普遍使用的网络请求框架就是Retrofit。

我们说了,注解的使用很平凡,那么我们来看看Retrofit的注解有哪些吧。

注解 含义
@GET 通过GET方式请求
@POST 通过POST方式请求
@DELETE 通过DELETE方式请求
@PUT 通过PUT方式请求
@HEAD 通过HEAD方式请求
@OPTIONS 通过OPTIONS方式请求
@PATCH 通过PATCH方式请求

以上的都是请求方式。这里就知道了我们并不是只能有四种请求方式的。

还有一些对这个请求进行标注的注解。

注解 含义
@Headers 给请求添加请求头
@Path 用于restful风格的请求替换其中的路径
@Query 用于标注请求的参数,一般get请求
@FormUrlEncoded 表示这个请求以表单的方式提交
@Field 用于标注请求的参数,一般post请求
@Body 用于标注请求的参数,一般是一个请求体,可以上传文件或者是一个类

上面的就是Retrofit常用注解了。

Retrofit的使用

这里要导入两个依赖包,分别是retrofit2和gson的。因为retrofit2支持直接将获取到的数据转换成实体类对象,方便我们使用。

在项目文件下build.gradle(app)的dependencies中导入所需要的库

implementation group: 'com.squareup.retrofit2', name: 'retrofit', version: '2.6.3'implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.0'

我们先新建一个网络请求类,在其中实例化retrofit。

// 请求地址 public static String IP = "http://www.baidu.com";// 实例化Retrofit private static Retrofit retrofit = new Retrofit.Builder()// 设置Retrofit的基础网络地址 .baseUrl(IP)// 添加gson实例化工厂 .addConverterFactory(GsonConverterFactory.create()) .build();

设置了baseUrl(IP),之后通过该对象发起的网络请求中默认在你的请求连接地址前加上IP。

新建一个接口,用于存放网络请求的各个地址

public interface Link { @GET("/s?wd=坚定不移推动构建亚太命运共同体") Call<String> getBaiDu();}

在我们的网络请求类中创建一个可以访问到该接口的方法。

public static Link getLink(){ return retrofit.create(Link.class);}

这里使用的都是公开静态方法和变量,是为了在其他类中更加方便的使用网络请求类。

在MainActivity中去调用它

Net.getLink().getBaiDu().enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { String body = response.body(); System.out.println(body); } @Override public void onFailure(Call<String> call, Throwable throwable) { } });

这短代码中只需要你通过网络请求类Net访问Link结构getLink(),调用请求方法getBaiDu();我们会通过get方法去访问如下地址

http://www.baidu.com/s?wd=坚定不移推动构建亚太命运共同体

这其实就是将baseUrl和@GET中的地址拼接起来了。最基本的使用就是这么简单。

当然了,如果我们想将搜索的值设置为一个由用户输入的变量,我们修改getBaiDu方法

@GET("/s") Call<String> getBaiDu(@Query("wd") String value);

那么在调用时可以作为一个参数传入到该请求中,如

Net.getLink().getBaiDu("坚定不移推动构建亚太命运共同体").enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { String body = response.body(); System.out.println(body); } @Override public void onFailure(Call<String> call, Throwable throwable) { } });

如果我们的参数是restful风格的,那么我们需要修改以下传递的参数,比如/s就是restful风格,我们就这么改

@GET("/{path}")Call<String> getBaiDu(@Path("path") String path,@Query("wd") String value);

那么我们在调用时只需要全部以参数的形式传递即可

Net.getLink().getBaiDu("s","坚定不移推动构建亚太命运共同体").enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { String body = response.body(); System.out.println(body); } @Override public void onFailure(Call<String> call, Throwable throwable) { } });

这些效果都是一样的。

如果你需要传入请求头,那么就多加一个参数,如

@Headers({ "Accept: application/json", "User-Agent: Retrofit-Sample-App" }) @GET("/{path}") Call<String> getBaiDu(@Path("path") String path,@Query("wd") String value);

以上注解都是可以用的,如你想post请求那么使用@POST,效果都是一样的。灵活切换,多尝试。Restful的特点就是对开发者特别友好性能好,处理快,使用简单使用REST API非常方便支持NIO(新的IO API,可以替代标准的Java IO API)默认使用Gson解析

想要了解更多的可以去搜一搜这些注解,使用方式就是这么简单,也没多复杂。

可以和LiveData、ViewModle、Rxjava构建MVVM项目结构

网络请求总结

网络请求就到这里了,基本上这些网络框架就是我们日常开发中的全部了,至于HttpClient,它的使用不比java原生的HttpURLConnection方便到哪里去,我就不讲了,同样感兴趣的可以去自行查阅资料。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK