本文使用eclipse编辑器,gradle依赖jar,如若未配置此环境,请转Java Eclipse配置gradle编译项目配置好环境后再查看此文

在build.gradle文件中添加一下依赖

compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'

compile 'com.squareup.retrofit2:retrofit:2.3.0'

compile 'com.squareup.retrofit2:converter-gson:2.3.0'

定义java bean,bean中的变量名要与返回的json数据中的key保持一致,否则会匹配不上。

// 1. 定义java bean

/**

* Java Bean

*/

public class Info {

int error_code; // 状态码

String reason; // 返回状态文字

Result result; // 页面URL

@Override

public String toString() {

return "Info [error_code=" + error_code + ", reason=" + reason + ", result=" + result.toString() + "]";

}

}

/**

* Java Bean

*/

public class Result {

String h5url;

String h5weixin;

@Override

public String toString() {

return "Result [h5url=" + h5url + ", h5weixin=" + h5weixin + "]";

}

}

定义接口。

static String url = "http://v.juhe.cn/"; // 请求链接

static String KEY = "9488373060c8483a3ef6333353fdc7fe"; // 请求参数

// 2. 定义接口

public interface InfoService{

@GET("wepiao/query")

Call getInfo(

@Query(value = "key")

String key

);

}

4.获取Retrofit实例

// 3. 获取实例

Retrofit retrofit = new Retrofit.Builder()

// 设置OKHttpClient,如果不设置会提供一个默认的

.client(new OkHttpClient())

//设置baseUrl

.baseUrl(url)

//添加Gson转换器

.addConverterFactory(GsonConverterFactory.create())

.build();

执行retrofit.create方法

// 4. 执行retrofit.create方法

InfoService infoService = retrofit.create(InfoService.class);

执行同步请求

// 5. 执行请求

Call call = infoService.getInfo(KEY);

Response response = call.execute();

// 6. 判断是否成功,成功则打印出数据

if (response.isSuccessful()) {

Info info = response.body();

System.out.println(info.toString());

}

执行异步请求

// 5. 执行请求

Call call = infoService.getInfo(KEY);

call.enqueue(new Callback() {

public void onResponse(Call call, Response response) {

Info info = response.body();

System.out.println(info);

}

public void onFailure(Call call, Throwable t) {

System.out.println(t.getMessage());

}

});

retrofit注解:

方法注解,包含@GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。

标记注解,包含@FormUrlEncoded、@Multipart、@Streaming。

参数注解,包含@Query,@QueryMap、@Body、@Field,@FieldMap、@Part,@PartMap。

其他注解,@Path、@Header,@Headers、@Url。

几种特殊的注解

@HTTP:可以替代其他方法的任意一种

/**

* method 表示请的方法,不区分大小写

* path表示路径

* hasBody表示是否有请求体

*/

@HTTP(method = "get", path = "users/{user}", hasBody = false)

Call getFirstBlog(@Path("user") String user);

@Url:使用全路径复写baseUrl,适用于非统一baseUrl的场景。

@GET

Call v3(@Url String url);

@Streaming:用于下载大文件

@Streaming

@GET

Call downloadFileWithDynamicUrlAsync(@Url String fileUrl);

ResponseBody body = response.body();

long fileSize = body.contentLength();

InputStream inputStream = body.byteStream();

常用注解

@Path:URL占位符,用于替换和动态更新,相应的参数必须使用相同的字符串被@Path进行注释

@GET("group/{id}/users")

Call> groupList(@Path("id") int groupId);

//--> http://baseurl/group/groupId/users

//等同于:

@GET

Call> groupListUrl(

@Url String url

);

@Query,@QueryMap:查询参数,用于GET查询,需要注意的是@QueryMap可以约定是否需要encode

@GET("group/users")

Call> groupList(@Query("id") int groupId);

//--> http://baseurl/group/users?id=groupId

Call> getNews((@QueryMap(encoded=true) Map options);

@Body:用于POST请求体,将实例对象根据转换方式转换为对应的json字符串参数,这个转化方式是GsonConverterFactory定义的。

@POST("add")

Call> addUser(@Body User user);

@Field,@FieldMap:Post方式传递简单的键值对,需要添加@FormUrlEncoded表示表单提交Content-Type:application/x-www-form-urlencoded.

@FormUrlEncoded

@POST("user/edit")

Call updateUser(@Field("first_name") String first, @Field("last_name") String last);

@Part,@PartMap:用于POST文件上传

其中@Part MultipartBody.Part代表文件,@Part("key") RequestBody代表参数

需要添加@Multipart表示支持文件上传的表单,Content-Type: multipart/form-data.

@Multipart

@POST("upload")

Call upload(@Part("description") RequestBody description, @Part MultipartBody.Part file);

// https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java

// use the FileUtils to get the actual file by uri

File file = FileUtils.getFile(this, fileUri);

// create RequestBody instance from file

RequestBody requestFile =

RequestBody.create(MediaType.parse("multipart/form-data"), file);

// MultipartBody.Part is used to send also the actual file name

MultipartBody.Part body =

MultipartBody.Part.createFormData("picture", file.getName(), requestFile);

// add another part within the multipart request

String descriptionString = "hello, this is description speaking";

RequestBody description =

RequestBody.create(

MediaType.parse("multipart/form-data"), descriptionString);

@Header:header处理,不能被互相覆盖,用于修饰参数

//动态设置Header值

@GET("user")

Call getUser(@Header("Authorization") String authorization)

等同于

//静态设置Header值

@Headers("Authorization: authorization")//这里authorization就是上面方法里传进来变量的值

@GET("widget/list")

Call getUser()

@Headers 用于修饰方法,用于设置多个Header值

@Headers({

"Accept: application/vnd.github.v3.full+json",

"User-Agent: Retrofit-Sample-App"

})

@GET("users/{username}")

Call getUser(@Path("username") String username);

java retrofit2_Java Retrofit2使用相关推荐

  1. android 415错误,java - Android Retrofit2无法添加标头(415错误代码) - 堆栈内存溢出...

    我正在尝试通过skyscanner api访问票证数据并将其传递到我的视图,但是我无法实现这一点,因为我收到415错误代码,我正在使用Retrofit2并以编程方式添加标头. 我的界面如下所示: pu ...

  2. CardSlidePanel卡片左右划效果

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. java.lang.ClassNotFoundException: retrofit2.Retrofit$Builder解决思路

    ClassNotFoundException报错 具体问题 报错详情 推测可能是jar包问题 问题总结自定义依赖缺少依赖jar 具体问题 Caused by: java.lang.NoClassDef ...

  4. JAVA调用接口简单封装,Mvp+Retrofit2+RxJava2 项目中使用的简洁封装

    Retrofit2 + RxJava2 是一个强大的组合,完成一系列网络请求 MVP当前用的很多的一种框架,Model+View+Presenter 本文记录了作者在项目中对 Retrofit2 + ...

  5. java retrofit_Android开发Retrofit2+Rxjava2+okHttp 网络框架封装

    释放双眼,带上耳机,听听看~! 说明 RxJava的概念其实很模糊,我对它的理解就是一个给你方便处理异步问题的框架,到底有多方便,体会过才知道... Retrofit就是对okhttp做了一层封装.把 ...

  6. java天气app_MVP+RxJava2+Retrofit2 实况天气app

    前言 我在这些文章中有介绍一些框架的简单使用方法,但是是分开使用的,现在我们把这些框架结合起来,来搭建一个简单的实况天气app,首先我会用MVP模式搭建app的大致框架,然后将RxJava2和Retr ...

  7. java 安卓下载文件_GitHub - Charay/downloadfile: 使用Retrofit2+Rxjava+Rxandroid+okhttp的方式下载文件并存储到sd卡指定目录...

    downloadfile 使用Retrofit2+Rxjava+Rxandroid+okhttp的方式下载文件并存储到sd卡指定目录 使用: gradle Step 1.在工程build.gradle ...

  8. java多张图片上传安卓,Android Rxjava+Retrofit2 多图片+文字上传

    注意点: 方案一中:map.put("files\"; filename=\"" + file.getName(), requestBody); 方案二中:bu ...

  9. java修改异常状态码_RxJava2 + Retrofit2 完全指南 之 统一状态码/Exception处理

    前言 直接上数据结构: { "code": 200, "data": { "id": "1", "name&q ...

  10. android端使用http2.0,android Retrofit2+okHttp3使用总结

    使用前准备 Build.gradle文件配置 dependencies配置 compile 'com.squareup.retrofit2:retrofit:2.0.0' compile 'com.s ...

最新文章

  1. wxDrawjs循环添加图形后增加标识记录点击的是哪个的另类方法
  2. python网上编程课程-零基础程序设计(Python入门)
  3. 20201014 《人工智能与大数据》第1节课 笔记
  4. dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
  5. 面试必会系列 - 1.2 Java 集合,源码讲解
  6. stringbuilder删除最后一个字符_Java类-StingBuffer,StringBuilder
  7. linux 先编译 再安装,Linux下编译安装FFmpeg
  8. C#设计模式:迭代器模式(Iterator Pattern)
  9. 7-11 分段计算居民水费
  10. 查看Linux系统版本的命令
  11. 如何用excel做正交分析_excel表格分析正交数据处理-excel中怎么对正交试验进行F值检验...
  12. OSI七层模式简单通俗理解
  13. 问题解决:系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的about_Execution_Policies
  14. 如何使用vue开发公众号网页
  15. Game Plug-ins(1)
  16. TikZ宏包子库汇总和简介
  17. Python小游戏之王者荣耀
  18. 直播app源代码,android弹框的几种操作
  19. 嵌入式软件测试都做些什么工作
  20. 百度地图api-全球逆地理编码

热门文章

  1. Unity给力插件之Final IK
  2. CentOS7 和 Ubuntu16 安装、配置并挂载 NFS
  3. 云计算时代的域名解析
  4. Xmind各种删除图标的方法
  5. 【数据分析实战经验】预测真实员工离职率(涉及模型:随机森林、逻辑回归,数据量:28211,工具:python)
  6. 量化指标公式源码_五行量化副图指标 源码 通达信
  7. 为什么感知机不能表示异或?
  8. KeilMDK编译错误Error: L6218E: Undefined symbol __aeabi_assert (referred from xxx.o).
  9. 计算机文献检索策略,计算机文献检索策略.ppt
  10. python 编码gbk_python 处理中文文件时的编码问题,尤其是utf-8和gbk