文档章节

android 介绍Retrofit的简单使用

短短的歼击机
 短短的歼击机
发布于 2016/11/13 15:56
字数 701
阅读 171
收藏 1

码上生花,ECharts 作品展示赛正式启动!>>>

Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton

 

导包:

 

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包

*这里需要值得注意的是导入的retrofit2包的版本必须要一致,否则就会报错。

 

 

 

首先定义我们请求的Api,我们假设是这样的

http://106.3.227.33/pulamsi/mobileLogin/submit.html

与Okhttp不同的是,Retrofit需要定义一个接口,用来返回我们的Call对象,这里示范的是Post请求:

 

public interface RequestServes {
    @POST("mobileLogin/submit.html")
    Call<String> getString(@Query("loginname") String loginname,
                           @Query("nloginpwd") String nloginpwd);
}

 

 

Retrofit提供的请求方式注解有@GET@POST,参数注解有@PATH@Query等,我们只介绍常用的;前两个顾名思义就是定义你的请求方式Get or Post,后面的@PATH指的是通过参数填充完整的路径,一般用法:

@GET("{name}")
Call<User> getUser(@Path("name") String name);

这里的参数username会被填充至{name}中,形成完整的Url请求地址,{name}相当于一个占位符;

@Query就是我们的请求的键值对的设置,我们构建Call对象的时候会传入此参数,

1
2
3
@POST("mobileLogin/submit.html")
   	Call<String> getString(@Query("loginname") String loginname,
                          @Query("nloginpwd") String nloginpwd);

这里@Query("loginname")就是键,后面的loginname就是具体的值了,值得注意的是Get和Post请求,都是这样填充参数的;

 

 

接口写完了之后我们需要来定义Retrofit对象来进行请求了;

创建一个Retrofit 对象

Retrofit retrofit = new Retrofit.Builder()
               .baseUrl("http://106.3.227.33/pulamsi/")
               //增加返回值为String的支持
               .addConverterFactory(ScalarsConverterFactory.create())
               //增加返回值为Gson的支持(以实体类返回)
               .addConverterFactory(GsonConverterFactory.create())
               //增加返回值为Oservable<T>的支持
               .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
               .build();

 

这里的baseUrl加上之前@POST("mobileLogin/submit.html")定义的参数形成完整的请求地址;

addConverterFactory(ScalarsConverterFactory.create())的意思是构建了一个返回支持,如果你的Call对象的泛型接收另外的格式需要添加另外的支持,上述代码已经列出;

接下来我们用这个Retrofit对象创建一个RequestSerives接口对象,也就是我们之前定义的那个接口,并且得到我们的Call对象;

 
RequestSerives requestSerives = retrofit.create(RequestSerives.class);//这里采用的是Java的动态代理模式
Call<String> call = requestSerives.getString("userName", "1234");//传入我们请求的键值对的值

利用得到的Call对象,然后我们就发出网络请求了:

 

call.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call, Response<String> response) {
        Log.e("===","return:"response.body().toString());
    }

    @Override
    public void onFailure(Call<String> call, Throwable t) {
        Log.e("===","失败");
    }
});

© 著作权归作者所有

下一篇: 自己做地图
短短的歼击机

短短的歼击机

粉丝 85
博文 268
码字总数 269797
作品 0
武汉
高级程序员
私信 提问
加载中
请先登录后再评论。
Android网络框架之Retrofit + RxJava + OkHttp 变化的时代

1、什么是Retrofit框架? 它是Square公司开发的现在非常流行的网络框架,所以我们在导入它的包的时候都可以看到这个公司的名字,目前的版本是2。 特点: 性能好,处理快,使用简单,Retrofi...

osc_o9gnlxa0
2018/05/02
5
0
ARetrofit组建化最佳路由

Android组件化超级路由,为简单而生。 Github 源码: ARetrofit 原文 demo demo apk 下载 一 介绍 从命名来看,做Android开发的小伙伴们感觉是不是似曾相识…是的,Retrofit,一款优秀的网络框...

CharlesZhu
2018/06/05
0
0
Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇

https://www.jianshu.com/p/5bc866b9cbb9 最近因为手头上的工作做完了,比较闲,想着做一些优化。看到以前用的那一套网络框架添加一个请求比较麻烦,并且比较难用,所以想改造一下网络框架。...

osc_9z5br62t
2018/05/28
14
0
Android 网络请求Retrofit + RxJava

一、背景 经常看到项目用Retrofit+RxJava+RxAndroid的框架,为了看懂项目的结构。现在来了解一下,Retrofit: Retrofit是Square 公司开发的一款正对Android 网络请求的框架。底层基于OkHttp 实...

osc_bfhs2jat
2018/04/05
2
0
Android OKHttp网络框架

好久没逛简书了。这周公司的项目也已经愉快的迭代了新版本,对于之前一直存留的东西一直没怎么梳理,今天想说说这两年特别火的网络框架。okhttp我想大部分Android开发者都不陌生,因为它的到...

osc_97lc6mbg
2018/01/04
4
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis之foreach用法

在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况:动态生成sql语句的查询条件,这个时候我们就可以用mybatis的foreach了 foreach元素的属性主要有item,index,collection,ope...

osc_0hs26yvj
12分钟前
0
0
css笔记整理

0索引 1html标签块 2选择器 3CSS的引入方式: 4CSS浮动 :流式布局 5盒子模型 6案例一网站首页 7案例二网站注册页面 1html标签块 div标签:默认占- -行,自动换行 span标签:内容显示在同- -行 <!...

osc_3grma05a
13分钟前
3
0
js获取图片的EXIF,解决图片旋转问题

相信大家在做项目的时候会遇到在canvas里加入图片时,图片发生90°,180°的旋转。当时的你肯定时懵逼的,为毛。 其实这就是图片的EXIF搞的鬼。 什么是EXIF 简单来说,Exif 信息就是由数码相...

osc_ytmgp8ea
14分钟前
0
0
StringUtils.isEmpty()和isBlank()的区别

一、概述 两种判断字符串是否为空的用法都是在程序开发时常用的,相信不少同学在这种简单的问题上也吃过亏,到底有什么区别,使用有什么讲究,带着问题往下看。 二、jar包 commons-lang3-3....

osc_1mofhvr6
16分钟前
0
0
H5嵌入钉钉

1,需要在项目种引入钉钉官方的js <script type="text/javascript" src="http://g.alicdn.com/dingding/dingtalk-jsapi/2.3.0/dingtalk.open.js" ></script> 或者npm 也可以的 2,钉钉......

osc_ucqb2u3q
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部