Android网络请求框架之Retrofit

合集下载

Android网络编程(十一)源码解析Retrofit

Android网络编程(十一)源码解析Retrofit

Android网络编程(十一)源码解析Retrofit前言最近博客的产出确实很少,因为博主我正在写一本Android进阶书籍,两头很难兼顾,但是每个月也得至少发一篇博客。

上一篇我们介绍了Retrofit的使用方法,这一篇我们照例来学习Retrofit的源码。

1.Retrofit的创建过程当我们使用Retrofit请求网络时,首先要写请求接口:public interface IpService {@GET("getIpInfo.php?ip=59.108.54.37")Call<IpModel> getIpMsg();接着我们通过调用如下代码来创建Retrofit:Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).build();Retrofit 是通过建造者模式构建出来的,接下来查看Builder方法做了什么:public Builder() {this(Platform.get());}很简短,查看Platform的get方法,如下所示。

private static final Platform PLATFORM = findPlatform();static Platform get() {return PLATFORM;}private static Platform findPlatform() {try {Class.forName("android.os.Build");if (Build.VERSION.SDK_INT != 0) {return new Android();}} catch (ClassNotFoundException ignored) {}try {Class.forName("java.util.Optional");return new Java8();} catch (ClassNotFoundException ignored) {}try {Class.forName("org.robovm.apple.foundation.NSObject");return new IOS();} catch (ClassNotFoundException ignored) {}return new Platform();}Platform的get方法最终调用的是findPlatform方法,根据不同的运行平台来提供不同的线程池。

retrofit的用法

retrofit的用法

retrofit的用法Retrofit 是一款用于 Android 平台的类型安全的HTTP 客户端,它的设计理念是简洁、易用、可读性好,不断引用着许多其他库的优势,从而成为了大家使用Android 网络请求的首选。

那么,本文将为大家介绍Retrofit 在 Android 中的使用方法和一些需要注意的细节,以便开发者快速、准确地对其进行应用。

## 1、基础环境和依赖在通过 Retrofit 进行网络请求时,我们需要事先导入相关的依赖库,包括网络请求所依赖的 OkHttp 库、由于 Retrofit 库本质上是基于反射的,所以还需要导入Retrofit 的反射库:```gradle implementation'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation'com.squareup.okhttp3:logging-interceptor:4.9.1'```其中,`converter-gson` 是用于数据解析的库,这在后面的请求部分中进行了详细解释。

`logging-interceptor` 库用于记录网络请求和响应时的日志信息,方便开发者进行调试。

## 2、请求定义在使用 Retrofit 进行网络请求时,我们通常需要先定义请求接口,这些请求接口对应服务端 API 接口的URL、请求方式、请求头、请求参数等信息。

定义请求接口时,开发者可以采用注解的方式来减少代码的编写,但是需要注意的是,Retrofit 中的每个注解都有其特定的作用,而且注解的用法和顺序对请求的参数以及请求方式有影响。

下面是一段 GET 请求接口的示例代码:```java public interface ApiService{ @GET("api/login") Call<User>login(@Query("username") String username, @Query("password") String password); } ```其中,注解`@GET`指定了 API 接口的请求方式为 GET请求,括号里面的字符串是接口路径。

Android网络编程 Retrofit2前篇

Android网络编程 Retrofit2前篇

Android网络编程 Retrofit2前篇[基本使用]前言Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,而OkHttp现在已经得到Google官方认可,不了解OKHttp的请查看本系列的前作。

1.使用前准备老生长谈,先配置build.gradle:dependencies {...compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:converter-gson:2.1.0'compile'com.squareup.retrofit2:converter-scalars:2.1.0'//ConverterFactory的String依赖包}当然别忘了在manifest加入访问网络的权限:<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>这次我们访问的网站产生了变化,我们用淘宝ip库,里面有访问接口的说明:1. 请求接口(GET):/service/getIpInfo.php?ip=[ip地址字串]2. 响应信息:(json格式的)国家、省(自治区或直辖市)、市(县)、运营商3. 返回数据格式:{“code”: 0,”data”: {“ip”: ”210.75.225.254”,”country”: ”\u4e2d\u56fd”,”area”: ”\u534e\u5317”,“region”: ”\u5317\u4eac\u5e02”,”city”: ”\u5317\u4eac\u5e02”,”county”: ”“,”isp”: ”\u7535\u4fe1”,“country_id”: ”86”,”area_id”: ”100000”,”region_id”: ”110000”,”city_id”: ”110000”,“county_id”: ”-1”,”isp_id”: ”100017”}}其中code的值的含义为,0:成功,1:失败。

Android开发retrofit入门讲解

Android开发retrofit入门讲解

Android开发retrofit⼊门讲解前⾔ retrofit基于okhttp封装的⽹络请求框架,⽹络请求的⼯作本质上是 OkHttp 完成,⽽ retrofit 仅负责⽹络请求接⼝的封装.如果你不了解OKhttp建议你还是先了解它在来学习使⽤retrofit,传送门: Retrofit优势,就是简洁易⽤,解耦,扩展性强,可搭配多种Json解析框架(例如Gson),另外还⽀持RxJava.但是,这篇博客不讲解RxJava配合使⽤的部分,与RxJava的配合使⽤将在另外⼀篇博客中讲解. 另外retrofit已经是封装的⾮常好了,作者的想的很完整,它的封装的思想⼗分准确⽽且恰到好处(堪称标准),所以不建议多此⼀举的再次封装retrofit. 再次封装不会让你很⽜逼. 只会让你看起来更蠢。

你会想封装只能说明你压根没理解或者阅读过retrofit。

过度封装以后出现⼀个任何问题都可能出现重构灾难,那就整个项⽬的接⼝代码都要增加代码。

减少重复⼯作只需要给2个东西做⼀个⼯具类(OkHttpClient与Retrofit.Builder()),在⼀些简单场景只需要将配置好的⽹络接⼝列表服务类保存好(保存到Application或者单例保存)。

Github地址依赖 如果你不需要使⽤RxJava模式,那么你只需要依赖下⾯2个:implementation 'com.squareup.retrofit2:retrofit:2.6.2'implementation 'com.squareup.retrofit2:converter-gson:2.4.0' gson是⽤来解析的Json数据使⽤的(个⼈偏爱Gson),retrofit也⽀持其他解析⼯具⽐如fastJson简单的Demo(异步请求) ⽼规矩按思维顺序讲解demo1.创建Retrofit请求基础配置 Retrofit配置好后,你可以将它单例保存,也不可以保存。

【推荐下载】Android常用网络请求框架xUtils、OkHttp、Volley、Retorfit对比

【推荐下载】Android常用网络请求框架xUtils、OkHttp、Volley、Retorfit对比

Android 常用网络请求框架xUtils、OkHttp、Volley、Retorfit 对比2017/03/21 641 网络请求框架总结1.xutils 此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一以后这个库不维护了,或者中间某个模块出问题了,这个影响非常大,因此在项目开发时,一般会更喜欢选择专注某一领域的框架。

2.OkHttp Android 开发中是可以直接使用现成的api 进行网络请求的,就是使用HttpClient、HttpUrlConnection 进行操作,目前HttpClient 已经被废弃,而android-async-http 是基于HttpClient 的,可能也是因为这个原因作者放弃维护。

而OkHttp 是Square 公司开源的针对Java 和Android 程序,封装的一个高性能http 请求库,它的职责跟HttpUrlConnection 是一样的,支持spdy、http 2.0、websocket ,支持同步、异步,而且OkHttp 又封装了线程池,封装了数据转换,封装了参数使用、错误处理等,api 使用起来更加方便。

可以把它理解成是一个封装之后的类似HttpUrlConnection 的东西,但是在使用的时候仍然需要自己再做一层封装,这样才能像使用一个框架一样更加顺手。

3.Volley Volley 是Google 官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持HttpClient、HttpUrlConnection,甚至支持OkHttp,而且Volley 里面也封装了ImageLoader,因此如果你愿意你甚至不需要使用图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,稍复杂点的需求还是需要用到专门的图片加载框架。

android retrofit用法

android retrofit用法

android retrofit用法Android Retrofit用法Retrofit是一个广泛使用的网络请求库,在Android开发中非常受欢迎。

它简化了与服务器进行通信的过程,提供了一种简单、灵活和高效的方式来处理网络请求。

下面是一些Android Retrofit的常见用法和详细的讲解。

1. 添加依赖库首先,在你的项目中添加Retrofit依赖库。

在你的文件中的dependencies块中添加以下代码:implementation ':retrofit:'请注意将”“替换为你需要使用的Retrofit版本号。

2. 创建网络请求接口接下来,创建一个接口来定义你的网络请求。

这个接口将包含你希望发送到服务器的所有请求。

public interface ApiService {@GET("users/{user}/repos")Call<List<Repo>> getRepos(@Path("user") String user); }在这个例子中,我们定义了一个名为getRepos的方法,该方法将使用GET请求获取指定用户的存储库列表。

@GET注释用于指定HTTP请求的类型和路径,@Path注释用于指定请求路径中的动态参数。

3. 创建网络请求实例接着,创建一个Retrofit实例来处理你的网络请求。

通常,在你的应用程序的某个单例类中创建并初始化Retrofit实例。

Retrofit retrofit = new ().baseUrl(".addConverterFactory(()).build();ApiService apiService = ();在这个例子中,我们使用Builder模式创建一个Retrofit实例。

我们指定了服务器的基本URL和要使用的转换器(这里我们使用Gson来将响应转换为Java对象)。

retrofit用法

retrofit用法

retrofit用法Retrofit用法指南咱们来聊聊Retrofit这个超酷的东西。

你要是搞安卓开发,就知道它就像一把神奇的钥匙,能轻松打开网络通信的大门。

Retrofit是一个用于Android和Java的类型安全的HTTP客户端。

啥叫类型安全呢?就好比你去超市买东西,你得清楚你拿的是苹果还是香蕉,不能搞混了。

在网络通信里,类型安全就是让你清楚地知道你收到的数据是什么类型,不会稀里糊涂地处理。

先说说怎么把Retrofit引入到你的项目里。

这就像是邀请一位贵宾到你家做客,你得给人家安排好地方。

在Android项目里,你得在你的build.gradle文件里加上相应的依赖。

这一步可不能马虎,就像盖房子打地基一样重要。

要是这一步错了,后面的事儿就没法顺利进行了,那可就糟糕啦!创建Retrofit实例是很关键的一步。

这就好比你要开车出门,得先把车启动起来。

你得给Retrofit配置一个Base URL,这Base URL就像是车的导航起始点。

比如说,你要访问一个网站的很多不同页面,这个Base URL 就是这个网站的主地址,后面具体的请求就像在这个主地址基础上找不同的房间。

你要是把Base URL写错了,那就像你导航输错了起始点,车开出去也到不了正确的地方。

接口的定义在Retrofit里是个很有趣的部分。

你可以把接口想象成一个菜单。

你告诉Retrofit你想要什么服务,就像你在餐厅对着菜单点菜一样。

每个接口方法就对应着一个菜,每个方法的注解就像是对这道菜的特殊要求。

比如说,你可以用GET注解表示你要获取数据,这就像你跟服务员说你要一份凉拌黄瓜(这只是个比喻哈),凉拌黄瓜就是通过GET方式从厨房(服务器)获取到的。

再说说回调。

回调就像是你在餐厅等菜的时候,服务员告诉你菜做好了的那个通知。

在Retrofit里,当你发送一个网络请求后,它不会干等着,而是继续做其他事情。

等数据准备好了,就通过回调来告诉你。

Android网络请求框架Retrofit详解

Android网络请求框架Retrofit详解

Android⽹络请求框架Retrofit详解介绍:Retrofit 是Square公司开发的⼀款针对Android⽹络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官⽅认可,⼤量的app都采⽤OkHttp做⽹络请求。

本⽂使⽤Retrofit2.0.0版本进⾏实例演⽰。

使⽤Retrofit可以进⾏GET,POST,PUT,DELETE等请求⽅式。

同步请求:需要在⼦线程中完成,会阻塞主线程。

Response response = call.execute().body();异步请求:请求结果在主线程中回调,可以在onResponse()回调⽅法进⾏更新UI。

call.enqueue(Callback callback)使⽤步骤:(1) 创建⼯程,添加jar:compile 'com.squareup.retrofit2:retrofit:2.0.0'compile 'com.squareup.retrofit2:converter-gson:2.0.0' //这两个jar版本要⼀致,否则会有冲突(2) 创建业务请求接⼝,具体代码如下/*** 创建业务请求接⼝*/public interface IUserService {/*** GET请求*/@GET("Servlet/UserServlet")Call<User> getUser(@Query("email") String email);/*** POST请求*/@FormUrlEncoded@POST("UserServlet")Call<User> postUser(@Field("name") String name, @Field("email") String email);}解释说明:@GET注解表⽰GET请求,@Query表⽰请求参数,将会以key=value(@Query注解参数名称为key,调⽤传进来的值为value)的⽅式拼接在url后⾯.@POST注解表⽰POST请求,@FormUrlEncoded将会⾃动将请求参数的类型设置为application/x-www-form-urlencoded,@FormUrlEncoded注解不能⽤于Get请求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android网络请求框架之Retrofit Retrofit之前言Retrofit是square家族开源系列的精品之一,是一个简单好用的网络请求框架,基于REST 的架构风格,本框架的主要开发人Jake Wharton想必大家也有所耳闻,他也是REST的忠实拥护者和践行者。

引入开源框架,大部分开发者的目的是为了更快速的开发应用,省掉一些复杂的逻辑处理,Retrofit封装了网络请求,让开发者面向接口去请求服务,使用注解和代理去发起真正的请求,让开发者省掉所有网络请求的代码。

你不用担心android6.0不支持httpclient方式的请求,你也不用引入gson去转换数据与对象,所有的这一切,Retrofit都已帮你完美实现。

Retrofit之用法声明:1.以下例子是基于1.9.0版本的,后面还有2.0.0版的,下一篇文章我将给大家展示他们之间的区别;2.列子代码是基于AndroidStudio的。

1.在build.gradle文件里引入Retrofit需要的版本com.squareup.retrofit:retrofit:1.9.0,当然,如果了解RxJava和RxAndroid的童鞋也可以引入io.reactivex:rxjava:1.0.14 、io.reactivex:rxandroid:1.0.1,配合Retrofit使用会更加好用。

2.实现Callback接口public abstract class RCallback<T> implements retrofit.Callback<T> {@Overridepublic abstract void success(T t, Response response);@Overridepublic void failure(RetrofitError error) {Global.ProcException(error);}}看到泛型T,估计大家就知道意味着什么了吧?我们可以直接指定返回的对象了,不用再去解析json数据了!3.封装请求的载体public class RestAdapterFactory {private HashMap<String, SoftReference<RestAdapter>> adapters;private static volatile RestAdapterFactory maker;private RestAdapterFactory() {adapters = new HashMap<>();}/*** 获取创建RestAdapter的工厂** @return*/public synchronized static RestAdapterFactory getInstance() {synchronized (RestAdapterFactory.class) {if (null == maker) {synchronized (RestAdapterFactory.class) {maker = new RestAdapterFactory();}}}return maker;}/*** 创建RestAdapter** @param url* @return*/public synchronized RestAdapter build(final String url) {//这就是发起请求的对象RestAdapter adapter = null==adapters.get(url)?null:adapters.get(url).get();if (null == adapter) {final CellInfo cellInfo = Utils.getCellInfo();//添加一些headerRequestInterceptor requestInterceptor = new RequestInterceptor() {@Overridepublic void intercept(RequestFacade request) {request.addHeader("Authorization", String.format("Bearer %s", MainApp.getToken()));request.addHeader("LoyoPlatform", cellInfo.getLoyoPlatform());request.addHeader("LoyoAgent", cellInfo.getLoyoAgent());request.addHeader("LoyoOSVersion", cellInfo.getLoyoOSVersion());request.addHeader("LoyoVersionName", Global.getV ersionName());request.addHeader("LoyoVersionCode",String.valueOf(Global.getV ersion()));}};//指定url,设置log级别,设置拦截器。

adapter = new RestAdapter.Builder().setEndpoint(url).setLogLevel(RestAdapter.LogLevel.FULL).setRequestInte rceptor(requestInterceptor).build();adapters.put(url, new SoftReference<>(adapter));}return adapter;}}对于这个类就不详细解释了,就是封装了RestAdapter,用于发起请求。

4.定义请求接口和发起请求public interface ITask {@GET("/task/{Id}")void getTask(@Path("Id") String Id, retrofit.Callback<Task> cb);@DELETE("/task/{Id}")void deleteTask(@Path("Id") String Id, retrofit.Callback<Task> cb);@GET(FinalVariables.tasks + "template/{id}")void getTpl(@Path("id") String id, Callback<TaskTpl> cb);@DELETE(FinalVariables.tasks + "template/{id}")void deleteTpl(@Path("id") String id, Callback<TaskTpl> cb);@GET("/task/query")void getTasks(@QueryMap HashMap<String, Object> body,Callback<PaginationX<Task>> callback);@POST("/task")void create(@Body HashMap<String, Object> body, retrofit.Callback<Task> cb);}先解释一下一些注解,其实也不用解释,看单词的意思大家也明白啦。

方法上的:@PUT-修改,@DELETE-删除,@POST-创建,@GET-获取。

方法上的注解后面括号里的字符串就是这些请求指向的服务端地址,比如说服务器主地址是http://192.168.3.1:9527,那么getTask指向的地址就是http://192.168.3.1:9527/task,所需参数是一个String类型的id,查询后返回的对象就是Task。

是不是很简单?方法变量的:@Path-查询主键,@QueryMap-查询所需的参数集合,可以是任意对象。

比如我们查询Task列表@Overridepublic void GetData() {//这就是@QueryMap需要的参数HashMap<String, Object> map = new HashMap<>();map.put("pageIndex", pagination.getPageIndex());//当前页标map.put("pageSize", isTopAdd ? lstData.size() >= 20 ? lstData.size() : 20 : 20);//需要的数量map.put("joinType", mJoinType);//任务的类型map.put("status", mStatus);//任务的状态map.put("endAt", System.currentTimeMillis() / 1000);//截止时间smap.put("startAt", DateTool.getDateToTimestamp("2014-01-01", app.df5) / 1000);//起始时间s//发起请求,这里create方法返回的其实是ITask的代理类RestAdapterFactory.getInstance().build(Config_project.API_URL()).create(ITask.class).getTasks( map, new RCallback<PaginationX<Task>>(){@overidepublic void success(PaginationX<Task> paginationXTasks,Response r){//获取分页里的数据ArrayList<Task> tasks=paginationXTasks.getData();mAdapter.setData(tasks);mAdapter.notifyDataSetChanged();}@Overidepublic void failure(RetrofitError e){});}这里返回的是我们封装过的PaginationX对象,是一个分页数据封装,里面最终的数据就是Task数组。

相关文档
最新文档