Android Retrofit 2.0的基本使用

Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录(二) 通过对Retrofit2.0的<Retrofit 2.0 超能实践,完美支持Https传输>基础入门和案例实践,掌握了怎么样使用Retrofit访问网络,加入自定义header,包括加入SSL证书,基本的调试基础,但是正常的开发中会涉及cookie同步问题,可以实现一些自动或免登录登陆问题,接下来进入cookie同步姿势CookieCookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内 阅读详情

原文地址:http://blog.magicer.xyz/2017/01/android-retrofit2-basic/

简介

Retrofit是square公司全家桶中的一员。在okhttp基础上封装的一个网络请求框架。其他废话就不多说了。有几篇不错的文章,可以看一下。
官方介绍
深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
Retrofit2.0

集成

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

使用

我们需要为接口地址定义一个接口,如下。当接口为:http://192.168.0.78:8080/login时,我们可以把接口定义为这样。

public interface LoginApi {
    @FormUrlEncoded
    @POST("/login")
    Call<ResponseBody> login(@Field("username")String username, @Field("password")String password);
}

在我们想要做网络请求的时候,这样写:

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://192.168.0.78:8080")
                .build();
        LoginApi login = retrofit.create(LoginApi.class);
        retrofit2.Call<ResponseBody> data = login.login(username, password);
        data.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(retrofit2.Call<ResponseBody> call, Response<ResponseBody> response) {
                if (response.isSuccessful()) {
                } else {
                }
            }
            @Override
            public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
                Log.i(TAG, "retrofit  onFailure: " + t.getLocalizedMessage());
            }
        });

很明显。@POST表明该请求是POST请求。@Field是提交的表单数据。

各注解含义

注解都是在定义接口的时候使用的。做网络请求的代码都是一样的。

@GET

用来表明请求方式为GET请求。

@Path

可以使用在POST和GET请求。
例如:

public interface AnswerApi {
    @GET("/word/answer/{barrier}/{stage}/{userId}")
    Call<ResponseBody> answer(@Path("barrier")int barrier,
                                    @Path("stage")int stage,
                                    @Path("userId")String userId);
}
@PathMap
Query

可以使用在POST和GET请求。用来配置接口中的参数(?之后的)。

public interface QuestionsApi {
    @GET("/word/questions")
    Call<ResponseBody> getQuections(@Query("wordIds") String wordIds, @Query("stage")int stage);
}
@QueryMap
some

看下这个就基本上没问题了。

//http://m2.qiushibaike.com/article/list/text?page=1
//基本使用
    @GET("/article/list/text?page=1")
    retrofit2.Call<ResponseBody> getData();

    //动态替换参数,返回解析后的数据
    @GET("/article/list/text?")
    Call<Bean> getGsonData(@Query("page") int page);

    //
    @GET("/article/list/text?")
    Call<Bean> getNetData(@QueryMap Map<String,String > map);

    @GET("/article/list/{type}?/")
    Call<Bean> getDataWithPath(@Path("type") String type,@Query("page") int page);

    @FormUrlEncoded //POST请求必须添加
    @POST("/login?")
    Call<ResponseBody> postData(@Field("username") String username,@Field("pwd") String passwrod);

    @FormUrlEncoded
    @POST("/login?")
    Call<ResponseBody> postMapData(@FieldMap Map<String,String> map);

@Body的使用

如下所示,retrofit会把Bean转成json数据进行请求。默认使用的是Gson
可以参考这里 链接

 @POST("/word/records")
 Call<WordBrowseRecord> postWordRecords(@Body Bean bean);

ps:Gson怎么控制Date型数据的转换格式呢?看下面代码你就明白了

        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd HH:mm:ss")
                .create();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.HOST)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

自定义Client

在一些情况下我们需要自定义clien,来设置一些请求的参数。那么怎么设置呢? 直接上代码。

        Interceptor interceptor = new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                Request request = chain.request()
                        .newBuilder()
                        .addHeader("Content-Type", "application/json")
                        .addHeader("Accept-Encoding", "gzip, deflate")
                        .addHeader("Connection", "keep-alive")
                        .addHeader("Accept", "*/*")
                        .addHeader("Cookie", "JSESSIONID")
                        .build();
                return chain.proceed(request);
            }
        };
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .build();

                //之后在使用的时候
      Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.HOST)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();
Android 使用Retrofit2.0 + OKHttp 实现 HTTP协议请求 记得之前要想实现http协议自己封装会比较繁琐,后来有了OKHttp,另http请求更加轻便。 今天主要来说下Retrofit2.0的用法,由于本人之前几年用的as3 air,也是最近才开始重新回来写Android,对于Retrofit的使用经验为0,上手就是看的2.0,个人觉得Retrofit2.0用起来相比OKHttp更加方便代码也很容易理解,但是网上关于Retrofit2.0的资料很少,于 阅读详情

相关推荐

Android框架之路——Retrofit2.0的初窥(包含Gson)

使用姿势:   1. 使用教程 添加依赖 compile ‘com.squareup.retrofit2:retrofit:2.2.0’ compile ‘com.squareup.retrofit2:converter-gson:2.2.0’ AndroidStudio添加Gson插件——GsonFormat    2.

等一杯咖啡的博客 3349

android eds2.0 加密,Retrofit 2.0 详解(三)报文加解密 拦截器(Interceptor)

接下来我们讲解一下怎么通过Retrofit 来个传输中的报文加密,老规矩,还是先写Service接口@POST("NewsServlet")Observable testInterceptor(@Body News news);关键点就是怎么把news这个对象的json字符串加密,那就需要用到拦截器了Interceptor,不知道的老铁还是自行百度吧,下面咱们看下怎么通过Interceptor来给...

weixin_39977586的博客 863

基于Godot 4的战术RPG开发:模块化架构与核心系统实现

在游戏开发领域,模块化架构和回合制战斗系统是构建复杂策略游戏的基础。模块化设计通过关注点分离,将游戏逻辑分解为独立、可复用的组件,如数据模型、功能模块和场景,从而提升代码的可维护性和扩展性。回合制战斗系统则依赖于清晰的状态机循环,管理从单位选择、行动决策到伤害结算的完整流程,这是策略游戏体验的核心。这些技术为独立开发者提供了高效起点,能快速验证游戏原型。本文聚焦于一个专为Godot 4引擎设计的开源战术RPG模板,它正是运用了模块化架构和回合制状态机,实现了网格移动、相机控制和基础AI等核心功能。该模板通过

weixin_27021789的博客 615

好用的后端参数校验注解@Validated

在实际写项目的过程中,相信大家对一些表单字段的校验并不陌生,比如? 一个前端的登录注册表单,你可能需要对用户名密码的长度进行限制或者对邮箱以及手机号码进行正则校验等。 但是大家都知道,仅仅依靠前端进行参数的判断是绝对不行的,市面上的很多请求工具postman这些都是直接绕过前端发送请求的。

sunao1106的博客 2056

基于STM32的无人机智能避障与路径规划系统设计

本文详细介绍了基于STM32的无人机智能避障与路径规划系统设计,涵盖硬件选型、传感器组合、软件架构及算法实现。通过多传感器数据融合和改进的VFH+算法,系统在复杂环境中实现92%以上的避障成功率。STM32微控制器的实时性和低功耗特性为无人机自主导航提供了可靠保障,适用于工业巡检、仓储物流等场景。

blockchain9miner的博客 877

Eureka常见面试题总结

点击关注我的博客原文 Eureka是Netflix组件的一个子模块,也是核心模块之一。云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移(来源springcloud中文网的介绍:https://www.springcloud.cc/)。下图总结了Eureka服务端(以下简称服务端)与Eureka客户端(以下简称客户端)之间协同工作的流程: 流程说明:...

u012105931的博客 2万+

Android retrofit 日志拦截器

背景在使用Android retrofit+rxjava时,想获知网络请求的一些参数,方便调试,比如:请求地址、请求响应时间、请求响应消息体等内容,虽然部分可以通过每个接口进行获知,但是这样极其不方便,那么有没有可以统一设置的方法呢?请接下去看。日志拦截器retrofit是使用okhttp3,做为网络请求,okhttp3有个Interceptor接口,可以对请求和响应进行拦截。通过这个机制,我们可以

画虎烂的专栏 8513

AI驱动Spine骨骼动画生成:从图像拆分到动画自动化的全流程解析

计算机视觉与生成式AI技术正深度赋能传统数字内容生产流程。在2D动画制作领域,骨骼动画技术通过模拟真实生物关节运动,实现了角色动画的高效制作与灵活控制。其核心原理在于将角色拆分为独立部件,通过骨骼层级关系驱动部件变换,结合关键帧插值算法生成流畅动作。这项技术的工程价值在于大幅降低动画制作门槛,提升内容生产效率,尤其适用于游戏开发、影视预演、广告设计等需要快速原型迭代的场景。本文聚焦于如何利用SIFT特征匹配、RANSAC几何验证等CV算法实现部件自动对位,并结合动画12原则的程序化实现,构建从单张角色立绘到

weixin_28696185的博客 1518

java后台学习_Java后台开发学习(1)——User接口

第一次写后台,跟着大佬学习java后台开发。第一个任务就是写user接口,就跟着大佬以前的代码,磕磕碰碰开始写了。Model层@Data@Document(collection = "user")public class User {@NotNull@Id@Field("user_id")private String userId = UUID.randomUUID().toString();@N...

weixin_36147152的博客 344

Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化

拜拜PHOTOSHOP- 领导突然让我帮他把公章从图片中抠出来,在确保了不是要做坏事的情况下,我打开了PHOTOSHOP,用魔棒工具一点一点抠,但由于魔棒工具的原理是对比临近区域像素差值,导致封闭字体中的区域无法剔除,而且一点一点抠非常麻烦,愤而PYTHON,使用CV2完美解决。 效果如下(马赛克是我添加的): 任务就是把蓝色的公章抠出来。 效果如上。 代码如下: import cv2 import numpy as np src = cv2.imread(r"imagepath")#这里填你的原图像路

qq_43670549的博客 1万+

HanLP的分词

HanLP的分词

sikh_0529的博客 1万+

android retrofit 2.0,Android Retrofit2.0 RxJava3.0 基本使用

Android Retrofit2.0 RxJava3.0 基本使用这篇文章对于学习这个知识点有较好的参考作用,需要了解这方面技术的可以斟酌学习一下。一,ReactiveX要学习RxJava,那么不得不提他的由来ReactiveX,ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。ReactiveX是Reactiv...

weixin_30916627的博客 374

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

Android Retrofit2.0+RxJava3.0 基本使用

异常: Could not locate call adapter for io.reactivex.Observable<okhttp3.ResponseBody>. compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' RxJava适配器是1.0 所以换成RxJava2.0就可以了,两种方式配置RxJava适配器2.0 1,第三方的提供的适配器2.0 compile 'com.jakewharton.retrofit:retro

ezconn的博客 9705

关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本

如何将它翻译成matlab可以使用的矩阵变量,并参与运算。 由于这个大型刚度矩阵125万x125万≈1e12。matlab甚至其他计算软件无法保存这个大的一个矩阵文件。而这个刚度矩阵作为稀疏矩阵其中非零元素的数目只有有500多万。采用sparse稀疏矩阵技术是可以保存。 这里简单介绍一下这个Hypemesh导出的大型刚度矩阵txt文本。如图DMIG开头的标识符是换行符,后面两列是表示这条非零元素在刚度矩阵中列数的信息。我们已经将左边字母和符号等批量删除,得到了右边textread函数可以...

wenyusuran的专栏 1795

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

retrofit2 发送json数据_Android中Retrofit 2.0直接使用JSON进行数据交互

之前使用Retrofit都是将JSON串转化为POJO对象,针对不同的业务协议,定义相应的接口和参数列表。但是此种方式一般用在自己内部协议基础上,具体大的项目中,有些第三方的集成功能,一般都采用统一的方式即请求JSON和回应JSON进行数据交互,不可能每个第三方协议都会去定义与协议相应的POJO对象。HTTP肯定有GET和POST方法,先定义Retrofit Api的interface:packa...

weixin_28895791的博客 389

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Retrofit2.0 android.os.NetworkOnMainThreadException解决方法

在使用Retrofit2.0中出现了android.os.NetworkOnMainThreadException异常,代码如下: FamousInfoModel.getInstance(getActivity()).queryLookUp(“人才”,mCurrentPage) .subscribeOn(Schedulers.io())

Dream It Possible 7594

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

关于Android Retrofit 2.0使用心得

最近因为项目中使用Retrofit联网请求遇到问题,特意研究了下Retrofit的实现和原理。 总的来说,Retrofit不直接做网络请求,而是用OKhttp做联网请求,相当于一个联网请求适配器。 网络请求的目标虽然是数据,但是我们需要为这个数据写大量的配套代码,发起请求的对象Call,接收数据的对象CallBack,做数据转换的对象Converter,以及检查和处理异常的对象等。这对于一个项目的...

weixin_45347152的博客 201

Android用retrofit上传图片,Retrofit2.0 实现图文(参数+图片)上传方法总结

最近项目里用到了类似图文上传的功能,以前都是封装OkHttp的文件上传功能,这次想换个姿势,想用Retrofit2.0实现这样的功能,本来以为挺简单的,没想到进入了深坑,连续调整了好几种姿势都报了同一个错,接着网上类似的文章找了一大推,讲得都是模棱两可,或者对多参数格式不够友好,最后还是去看了相关的源码,自己把这个问题提出来解决了,在这里记录一下。一、定义网络请求接口public interfac...

weixin_42390041的博客 2234

Android 使用RxJava+Retrofit 2.0合并网络请求

在开发验证码的功能时,要求验证code的同时判断这个是不是服务码(万能码),这个就需要同时去请求两个接口,只要有一个功能就算成功。 @Override public void checkConfirmCode(String deviceId, String code, OnAPIListener listener) { Map map = new Has

疾风的博客 6511

Android Retrofit2.0 网络请求固定入参

前言 Android开发中进行网络请求时,我们很多时候会有有一些固定入参。比如: 写在请求头的token令牌。 一些第三方平台接口,请求时要求必须携带的平台key。 这些固定入参每次请求都写在请求方法中的话,势必会非常的烦,如果能统一封装一下岂不美哉? 在Retrofit2.0中我们可以通过Interceptor拦截器实现,然后在Okhttp3使用Builder添加Interceptor。 示...

DeMonnnnnn 1000

基于Retrofit2.0+RxJava+Dragger2实现不一样的Android网络构架搭建

我们很多开发者大都在小型公司,不了解大公司是怎么做Android网络框架的,也想知道那些用户量过千万的APP到底用了些什么技术,让我们一起来了解一下Android版的美团和Uber到底用了些什么技术。 今天我们就来讲讲怎么用Retrofit2.0+RxJava+Dragger2来实现Android网络构架搭建,给大家提供一种思路,供大家参考参考。

做更好的自己 1万+

android Retrofit2.0 RxJava2.0

android Retrofit2.0 RxJava2.0 Retrofit 一个用于Android和Java平台的类型安全的网络框架(是一套注解形式的网络请求封装库,REST API协议),Retrofit是一个Square开发的类型安全的REST安卓客户端请求库, 为网络认证、API请求以及用OkHttp发送网络请求提供了强大的框架 。

keen_zuxwang的博客 1658

android retrofit2.0 rxjava2,Android Retrofit 2.0 使用-补充篇

之前分享的Android Retrofit 2.0 使用,属于基本的使用,实际开发还远远不够,因此对其补充,主要在Retrofit配置和接口参数。Retrofit配置添加依赖app/build.gradlecompile 'com.squareup.retrofit2:retrofit:2.0.2'首先Builder(),得到OkHttpClient.Builder对象builderOkHttpC...

weixin_35762250的博客 208

Android Retrofit2.0+RxJava简单示例

Android Retrofit2.0+RxJava简单示例 Retrofit简介 RxJava简介 Retrofit+RxJava简单示例 如何简单GET一个api数据 目录Android Retrofit20RxJava简单示例目录 Retrofit简介 RxJava简介 RetrofitRxJava简单示例 如何简单GET一个api数据寻找api地址 分析JSON格式 Retrofit的封装

Traveler 813

Kotlin-Android开发之MVP模式+Retrofit2.0+RxJava1.0+Dagger2框架封装

前言:上一篇文章讲了《Kotlin&Java-Android开发之MVP模式+Retrofit2.0框架封装》相信你看了之后,收货不少,所以这次在MVP+Retrofit的基础上增加RxJava和Dagger,都是现在比较流行的框架,如果你没有看上篇博客,从这篇开始也是一样,每个框架都会大致介绍一下,非常适合小白。注意:此篇博客使用的代码是Kotlin代码,如果你对Kotlin不熟悉,请移...

等待着冬天的风的博客 2242
上一篇: Markdown使用
下一篇: java命令行提示:找不到或无法加载主类
Captain_Magicer
博客等级 码龄11年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值