这篇教程基于retrofit1.9版本和android平台.
以下部分代码和教程参考自http://square.github.io/retrofit/
准备:
retrofit的下载地址:https://github.com/square/retrofit
如果采用引入jar包的方式的话,也额外引入retrofit的依赖jar包.
因为retrofit1.9版本不再支持android原生的URLConnection和HttpClient框架.所以必须要引入okHttp2.0框架进行网络访问.
下面2个是必要的jar包
okhttp-2.2.0.jar
okio-1.0.2.jar(okhttp的依赖jar包)
下面的jar是功能增强的jar包.根据要使用的功能再去引入.
gson-2.3.jar
appengine-api-1.0-sdk-1.9.12.jar
rxjava-1.0.0.jar
以上jar包可以在github或者maven中央仓库下载到.注意jar包的版本.
GET方式
1
2
3
4
interface  SimpleGET{
   @GET ( "/" //表明是GET方式. "/"会拼接在setEndpoint(url)中url(主机地址)的后面.
  Response getResponse();  //可以简单的理解为网络访问完把Response转换为一个对象.这里没有转换,还是Response.
} 

访问,注意在Android上要在异步线程执行下面语句.
1
2
3
4
5
6
7
8
9
10
String url= "http://tieba.baidu.com" ;
RestAdapter adapter= new  RestAdapter.Builder().setEndpoint(url).build();  //setEndpoint(url)设置网络访问地址的主机地址
SimpleGET create = adapter.create(SimpleGET. class );  //retrofit会生成上面的SimpleGET接口的一个的实例.
Response response = create.getResponse();
int  status = response.getStatus();  //返回码
try  {
  InputStream in = response.getBody().in();  //response的输入流.看到网络访问的输入流都很熟悉吧.想转换成字符串还是json还是图片就看服务器给的是什么了.
catch  (IOException e) {
  e.printStackTrace();
}

  

POST方式
1
2
3
4
interface  SimplePOST{
   @POST ( "/android" //表明是使用Post方式进行访问. 并且会把后面的路径拼接到主机名的后面-->拼接到setEndpoint(url)中的url的后面.
  Response getResponse();
} 

异步线程中执行下面语句.
1
2
3
4
5
6
7
8
9
10
String url= "http://tieba.baidu.com" ;
RestAdapter adapter= new  RestAdapter.Builder().setEndpoint(url).build();  //和上面post后面的路径拼接,想当于访问http://tieba.baidu.com/android
SimplePOST create = adapter.create(SimplePOST. class );
Response response = create.getResponse();
int  status = response.getStatus();
try  {
  InputStream in = response.getBody().in();
catch  (IOException e) {
  e.printStackTrace();
} 

PATH
path是可以动态替换的.
1
2
3
interface  GitHub {
   @GET ( "/repos/{owner}/{repo}/contributors" )
  List<Contributor> contributors( @Path ( "owner" ) String owner,  @Path ( "repo" ) String repo);

网络访问部分
1
2
3
4
private  static  final  String API_URL =  "https://api.github.com" ;
RestAdapter restAdapter =  new  RestAdapter.Builder().setEndpoint(API_URL).build();
GitHub github = restAdapter.create(GitHub. class );
List<Contributor> contributors = github.contributors( "square" "retrofit" );  //相当于对路径中{}部分进行动态替换. 相当于访问https://api.github.com/repos/square/retrofit/contributors 

  

GsonConverter默认的转换器
看了上面这一些,可以回想retrofit也没方便多少啊.下面看一个例子就可以知道retrofit的魅力所在了.
注意需要引入gson的jar包
1
2
3
4
5
6
7
8
9
static  class  Contributor {  //一个pojo类(Plain Ordinary Java Object)简单的Java对象-->相比javaBean更简单.
  String login;
   int  contributions;
}
  
interface  GitHub {
   @GET ( "/repos/{owner}/{repo}/contributors" )
  List<Contributor> contributors( @Path ( "owner" ) String owner,  @Path ( "repo" ) String repo);
} 

网络访问部分.
1
2
3
4
5
6
7
RestAdapter restAdapter =  new  RestAdapter.Builder().setEndpoint(API_URL).build();  //默认设置了GsonConverter的转换器.把response直接解析为一个POJO对象.
GitHub github = restAdapter.create(GitHub. class );
//访问这个地址返回的是一个JsonArray,JsonArray的每一个元素都有login和contributions这2个key和其对应的value.提取出来封装进POJO对象中.
List<Contributor> contributors = github.contributors( "square" "retrofit" ); 
for  (Contributor contributor : contributors) {
     Log.v( "retrofit" , contributor.login +  " ("  + contributor.contributions +  ")" );
}

打印的结果:
JakeWharton (487)
pforhan (48)
edenman (40)
..........
直接方法 https://api.github.com/repos/square/retrofit/contributors得到的数如下的json串.
[
{      
"login": "JakeWharton",
"id": 66577,
............
"site_admin": false,
"contributions": 487
},
{
"login": "pforhan",
.............
"site_admin": false,
"contributions": 48
},
{
"login": "edenman",
"................
"site_admin": false,
"contributions": 40
},
...........
]

可以看到retrofit的魅力所在了

自定义的Converter(StringConverter)
Response可以获得输入流,我们可以把它转换成任何想要的格式.
自定义的 StringConverter转换器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class  StringConverter  implements  Converter{
  
   @Override
   public  Object fromBody(TypedInput input, Type type)  throws  ConversionException {  //response输入流到对象的转换,
   try  {
    InputStream in = input.in();  //获取了输入流,就可以根据意愿随意转换了.
    String str = convertStream2String(in);
     return  str;
  }  catch  (IOException e) {
    e.printStackTrace();
  }
  
   return  null ;
  }
  
private  String convertStream2String(InputStream in)  throws  IOException {  //inputStream转换为String
  BufferedReader reader= new  BufferedReader( new  InputStreamReader(in));
  StringBuilder sb= new  StringBuilder();
  String line= null ;
   while ((line=reader.readLine())!= null ){
    sb.append(line);
    sb.append( "\n" );
  }
   return  sb.toString();
}
@Override
public  TypedOutput toBody(Object obj) {  //对象到输出流的转换
   return  null ;
 }
  
}

1
2
3
4
interface  StringClient {
   @GET ( "/" )
  String getString();  //方法的返回值是String,需要StringConverter转换器Converter把Response转换为String.
} 

异步线程调用
1
2
3
4
5
String url= "http://tieba.baidu.com" ;
RestAdapter adapter= new  RestAdapter.Builder().setEndpoint(url).setConverter( new  StringConverter()).build();
StringClient create = adapter.create(StringClient. class );
String str = create.getString();

  第二片地址http://www.cnblogs.com/laiqurufeng/p/4484889.html

第三片地址http://www.cnblogs.com/laiqurufeng/p/4484916.html

Retrofit的使用教程(一)相关推荐

  1. Retrofit的使用教程(二)

    Query注解 interface QueryGET{@GET("/sheet")String getString(@Query("name")String n ...

  2. android实例教程_改造Android示例教程

    android实例教程 Welcome to Retrofit Android Example Tutorial. Today we'll use the Retrofit library devel ...

  3. Android开发之第三方框架使用汇总

    1. image loading 框架: 1.1 Glide1.2 Picasso1.3 后续更新... 2.网络框架: 2.1 xUtil32.2 OkHttp32.3 Retrofit2.4 后续 ...

  4. Android进阶-第三方框架使用汇总

    image loading 框架: 1.1 Glide1.2 Picasso1.3 后续更新... 2.网络框架: 2.1 xUtil32.2 OkHttp32.3 Retrofit2.4 后续更新. ...

  5. Retrofit 2简单使用教程

    作者: Chike Mgbemena 原文地址:https://code.tutsplus.com/tutorials/getting-started-with-retrofit-2–cms-2779 ...

  6. Retrofit教程

    (源码教程): https://www.jianshu.com/p/0c055ad46b6c 正文 Retrofit简介         Rrotrofit是一个RESTful架构的HTTP网络请求框 ...

  7. Retrofit 2.0 使用教程

    前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会 ...

  8. 详细的 Retrofit 2.0 使用教程

    这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解) 前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天, ...

  9. Android Retrofit使用教程(三):Retrofit与RxJava初相逢

    上一篇文章讲述了Retrofit的基本使用,包括GET,POST等请求.今天的文章中Retrofit要与RxJava配合使用. 了解RxJava RxJava有种种好处,我不在这里一一讲述.这里我只给 ...

最新文章

  1. 春愁(shunshu)—Mrs. Green Apple (歌词、汉译、罗马音)
  2. 2021-03-01 Matlab 多项式的根求解
  3. Service Broker in SAP Gateway and Kubernetes
  4. [CQOI2015]选数(杜教筛)
  5. python pdf报告_python生成pdf报告、python实现html转换为pdf报告
  6. 基于JAVA+Servlet+JSP+MYSQL的失物招领系统
  7. ROS2——Windows上的安装笔记
  8. MS SQL Server 2000 按日期自动备份
  9. AI公开课丨胡伟:基于表示学习的知识图谱实体对齐研究
  10. 2022 VMware下载安装教程
  11. 主流数据库之MySQL函数和MySQL数据操作基础知识及示例
  12. swfupload java实例_swfupload例子
  13. 使用搜狗新闻语料库,训练word embeding
  14. 推荐一个不错的在线制图网站---ProcessOn
  15. 读书笔记-财务报表资本结构分析
  16. 全国计算机软考网络管理员考试大纲(2012)
  17. iOS 证书管理、验证、打包流程
  18. Vivo手机实现录音转文字的方法,图文步骤详解,特别简单
  19. ARM中的字、半字、字节是多少位?
  20. gis空间校正没反应_使用ArcGIS进行空间校正的步骤(矢量数据)

热门文章

  1. 【SpringCloud系列】服务注册与发现 - Eureka Server源码分析(2)
  2. wow转服服务器不显示,魔兽世界怀旧服13日第二批免费转服详情 可以转服到哪些服务器?...
  3. 用myclipse运行项目时报launching client错误!
  4. OC中的数组:NSArray
  5. Stay Hungry Stay Foolish的真正含义
  6. “联创黔线”杯大数据应用创新大赛
  7. 分类classify
  8. 南加州计算机博士学几年,2020年南加州大学读博要多久
  9. 笔记:《机器学习训练秘籍》-吴恩达deeplearningai微信公众号推送文章
  10. leaflet-自定义底图