导航:首页 > 网络营销 > retrofit2可以实现哪些网络请求

retrofit2可以实现哪些网络请求

发布时间:2022-10-18 10:24:58

㈠ retrofit 2 支持rxjava2了吗

,一、 简介 Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求,其源码详见OkHttp Github。 本文全部是在Retrofit2.0+版本基础上论...

如何用RxJava2.0.7和Retrofit2.2.0优雅的实现网络请求

RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。

如果是Android开发的话,可以使用RxAndroid,这是对RxJava的一个扩展,结合sqare公司的retrofit可以很轻松的完成网络的访问。

我们知道,在Android中异步操作一般使用AsycTask来完成,但是AsycTask有很多缺点,如不能方便的终止任务的执行等。

RxAndroid完全可以替代AsycTask来完成各种异步操作,而且还有BindActivity和BindFragment方法,你根本不需要考虑异步操作时的Activity和Fragment的生命周期问题,还有更加强大的的链式调用,可以使程序很简洁。

EventBus有个缺点就是凡是使用了EventBus的类都不能进行混淆了,否则Evnetbus就找不到OnEvent方法了。

以上,推荐使用RxAndroid

㈢ Android网络请求库【OkHttp4.9.3】基本用法与原理分析

OkHttp是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说,OkHttp 现在几乎已经占据了所有的网络请求操作,Retrofit + OkHttp实现网络请求似乎成了一种标配。因此它也是每一个 Android 开发工程师的必备技能,了解其内部实现原理可以更好地进行功能扩展、封装以及优化。

OkHttp的高效性体现在:

第一步:创建OkHttpClient,创建OkHttpClient有两种方式:

OkHttpClient提供了丰富的配置方法,例如添加拦截器、指定连接池、设置请求超时等等。

第二步:创建请求

使用Request.Builder() 构建Request实例

第三步:发起网络请求

OkHttp支持同步和异步两种请求方式

OkHttp的使用方法非常简单,三步操作就可以发起一个简单的同步或异步请求。我们也可以很轻松地对网络请求进行配置,例如添加请求头、设置请求方式、设置请求超时等等,这些配置参数会在源码分析过程中详细介绍。

现在我们已经学会了三步操作发起网络请求,接下来以这三个步骤为切入点,深入到源码中学习OkHttp的实现原理,废话少说马上开车。

OkHttpClient创建方式有两种,我们看看两种方式有什么区别。

第一种直接使用默认构造函数,内部依然是使用建造者模式

第二种使用建造者模式

两种方式最终都是调用构造函数OkHttpClient(builder:Builder),由参数builder负责所有的参数配置工作。

当您创建单个OkHttpClient实例并将其用于所有 HTTP 调用时,OkHttp 性能最佳。 这是因为每个OkHttpClient都拥有自己的连接池和线程池,重用连接和线程可减少延迟并节省内存。 相反,为每个请求创建一个客户端会浪费空闲池上的资源。

Request同样使用建造者模式来创建,这里贴上部分重要源码,很简单就不细说了。

OkHttp发起网络请求分为同步请求和异步请求两种方式,我们只分析异步请求流程,因为只要理解了异步请求过程,基本上也就明白同步请求是怎么一回事了。

RealCall是连接应用层与网络层的桥梁,负责处理连接、请求、响应和数据流。

Dispatcher维护着一套异步任务执行策略,分析策略之前先介绍几个重要概念:

client.dispatcher.enqueue(AsyncCall(responseCallback)) 执行步骤为:

AsyncCall实现了Runnable接口,因此一旦被线程池中的线程处理就会调用它的run()方法:

话休絮烦,我们开始分析拦截器责任链:

责任链执行流程:首先获取当前拦截器interceptor,并且调用interceptor.intercept(next)执行拦截器操作。这里的next表示的是index+1后的责任链对象,拦截器的intercept()方法内部会调用next.proceed(request)方法再次进入到责任链,由于此时index已经加1,所以处理的是下一个拦截器。

如此循环往复,直到处理完责任链上最后一个拦截器为止。

注意除最后一个拦截器CallServerInterceptor不会调用chain.proceed(request)方法之外,其他拦截器都应该至少调用一次chain.proceed(request)方法。

为了验证上面的结论,我们进入到RetryAndFollowUpInterceptor的intercept()方法一探究竟:

可以看到注释1处重新进入责任链处理下一个拦截器。

有兴趣可以自行查看最后一个拦截器CallServerInterceptor源码,此处只给出本人阅读源码后得出的结论:

以上就是拦截器责任链的工作流程,我们再通过流程图仔细感受一下。

分析完拦截器责任链,我们继续分析AsyncCall#run()方法:

我们看到,如果()方法成功获得服务端返回的数据,则调用responseCallback.onResponse(this@RealCall, response)方法完成异步回调;如果服务端数据获取失败(请求异常),则调用responseCallback.onFailure(this@RealCall, canceledException)方法完成异步回调

需要注意的是,responseCallback回调是在子线程中完成的,所以如果想把数据显示到UI上,需要切换回主线程进行UI操作。

OkHttp发起网络请求全过程:

【知识点】OkHttp 原理 8 连问

㈣ 如何用 Retrofit 2 在安卓上实现 HTTP 访问

Retrofit是Square Inc.发布在开源社区的一款令人叹为观止的工具。它是一个类型安全的 HTTP 客户端,适用于安卓和 Java 应用。
类型安全 HTTP 客户端主要意味着,你只需关心发送出去的网络请求的语义,而不必考虑 URL 构建的细节,以及参数设定是否正确之类的事。Retrofit应对这些易如反掌,你只需写几个接口即可。就是这么简单!
我们通过一个例子来看看它是怎么实现的。笔者已经把这里所有的代码都放在了 Github 的 资源库里。如你所知,最好的学习方法就是查看这些代码,自己调试调试。
首先,笔者在 Android Studio 里建了一个空项目。老实说,每次看到欢迎界面上出现的那堆有关兼容性、以及应用所支持的 API 的选项,笔者都会感到非常迷茫。

好在我们只是弄个“玩具”项目而已,因此我们可以大胆地选择最新的 SDK,然后快速掠过项目向导,进入我们伟大的“hello world”安卓应用。
如果你自己不想纠结这些选项,可以直接点击这个 Github 的链接,导入笔者提交的现成项目:Floating button app skeleton.
通常,笔者在所有项目中都会启用 JRebel for Android。这是一个 Android Studio 的插件。“启用它”基本上意味着,只需点击一下自定义按钮就能运行应用,其余所有工作都交给它了。JRebel for Android 对安卓开发者来说是一款提升效率的工具,它可以在运行着的设备和模拟器上即时更新代码。这本质上意味着在开发应用时,你不必浪费宝贵的时间来等待应用重启,并因此而中途放弃这些应用的状态记录。总之特别棒!
说明一下,我在 ZeoTurnaround 公司工作,也就是创造JRebel for Android的公司。但它真的很好用,你值得一试。
Android Studio 2.0附带的新模拟器用着也很爽。现在,MainActivity 类的模拟器屏幕被激活了。
点一下浮动按钮,出现 snackbar。看起来不错。让我们随意更改一段代码,检验一下代码重新加载的功能。笔者首先想到的是修改 snackbar 的字符串值。
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
Snackbar.make(view, “Super fast hello world”, Snackbar.LENGTH_LONG)
.setAction(“Action”, null).show();
}
});

注意看,我们保存了一个文件,点击了一下按钮,接着模拟器上的代码就重新加载了。现在一切就绪!也就是说,我们可以研究 Retrofit 2 到底有什么用处了。
Retrofit 2 是一个类型安全的 HTTP 客户端,适用于安卓(及 Java)。但首先,它也是一个库。所以我们要先声明依赖。这个容易。不过,请注意,我们需要显式依赖gson 转换器,将 JSON 应答转换为 model 类。这与Retrofit 1不同。所以需要注意一下。
Add these two lines to the build.gradle file:
将这两行代码加到 build.gradle 文件中去:
compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta2’
compile ‘com.squareup.retrofit2:gson-converter:2.0.0-beta2’

Retrofit 的主要功能是可以在运行时生成代码,发送 HTTP服务查询请求。开发者只需写一个“说明”接口即可。假设我们有如下的一个 model 类:
通过这个我们可以创建一个名为GithubService的接口,用于实现 HTTP 通信。

public interface GitHubService {
@GET(“repos/{owner}/{repo}/contributors”)
Call<List<Contributor>> repoContributors(
@Path(“owner”) String owner,
@Path(“repo”) String repo);
}

This is the simplest example, we add the @GET annotation on an interface method and provide the path part of the URL that we want to expose it on. Conveniently, the method parameters can be referenced in the path string so you won’t need to jump through hoops to set those. Additionally, with other annotations you can specify query parameters, POST request body and so on:
@Query(“key”) — for GET request query parameter
@QueryMap — for the map of parameters
@Body — use it with the @POST annotation to provide the query body content.
这是一个最简单的例子。我们在接口方法中加入 @GET 注解,并且提供想要展示的 URL 的path部分。方便的是,由于可以在 path 字符串中引用方法参数,因此我们无需跳出循环再重新设定。另外,通过这些注解,你可以设定查询参数,以及 POST 请求主体等等:
@Query(“key”)  -- 用于GET请求查询参数
@QueryMap -- 用于参数映射
@Body -- 与@POST注解一起使用,提供查询主体内容
下面,为了能在运行时使用这个接口,我们需要构建一个 Retrofit 对象:

interface GitHubService {
@GET("repos/{owner}/{repo}/contributors")
Call<List<Contributor>> repoContributors(
@Path("owner") String owner,
@Path("repo") String repo);

public static final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}

笔者倾向于在包含网站请求的接口内使用 Retrofit builder。这么做并不是想让它变得复杂难懂。而是处于通用配置的考虑。例如,我们有默认的转换器,将 JSON 响应对象转为 Java 对象,但是,即使在每个 service 中复制粘贴一遍,也好过使用单一的抽象类,后者很容易造成泄漏。
With these pieces in place, we just need to perform the network call:
the specification of our queries
the Retrofit object builder
准备好这些代码后,我们只需发出网络请求:
请求的说明
Retrofit对象builder
为了实现GitHubService接口,需要初始化一个用于执行 HTTP 查询请求的 Call 对象。

GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
Call<List<Contributor>> call = gitHubService.repoContributors(“square”, “retrofit”);
List<Contributor> result = call.execute().body();

另外,有人可能也会选择设定请求的时间,让它成为异步请求,同时在执行完毕后提供 callback。

call.enqueue(new Callback<List<Contributor>>() {
@Override
public void onResponse(Response<List<Contributor>> response, Retrofit retrofit) {
// handle success
}

@Override
public void onFailure(Throwable t) {
// handle failure
}
});

听起来超简单!我们来处理一下 UI,然后写入代码。在浮动按钮的应用模板下,我们需要修改 content_main.xml 文件。笔者添加了一个发起请求查询的按钮,以及一个用以显示请求结果的文本区域:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fetch"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="151dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text=""
android:id="@+id/textView"
android:layout_above="@+id/button"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:textIsSelectable="false" />

第一次执行时,你的网络请求代码看起来可能是这样的:

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
Call<List<Contributor>> call = gitHubService.repoContributors(“square”, “retrofit”);
String result = call.execute().body().toString();
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(result);
}
});

这段代码自然无法运行。安卓框架不允许用户在 UI 线程中执行网络请求。UI 线程只应该用来处理一些用户输入。在这个线程中执行任何引起长时间阻塞的操作都会让用户体验变得非常糟糕。
因此,我们需要重构这段代码,把网络请求移入后台线程。使用 JRebel for Android 可以不费任何时间就搞定这事。我们将代码提取到 AsyncTask -- 这是一个在安卓上运行大型运算的默认框架。AsyncTask不太好看,它的具体运行方式也不算清洁,例如每次我们点击按钮时它都会去创建一个 Retrofit 对象。但是能用就行。

private class NetworkCall extends AsyncTask<Call, Void, String> {
@Override
protected String doInBackground(Call… params) {
try {
Call<List<Contributor>> call = params[0];
Response<List<Contributor>> response = call.execute();
return response.body().toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(String result) {
final TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(result);
}
}

接着,从 EventListener 中调用它:
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
final Call<List<Contributor>> call = gitHubService.repoContributors("square", "retrofit");
new NetworkCall().execute(call);
}
});

好啦,现在代码可以运行了。文本视图会根据 HTTP 请求的结果实时刷新。

㈤ 如何用RxJava2.0.7和Retrofit2.2.0优雅的实现网络请求

响应式代码基本组部ObservablesSubscribers(事实Observer才构建块实践使用SubscriberSubscriber才Observables应)Observable发送消息Subscriber则用于消费消息 RxJava 基本概念 Observable (观察者即观察者) Observer (观察者) subscribe (订阅)、事件 Scheler 调度器相于线程控制器 Observable Observer 通 subscribe() 实现订阅关系 Observable 需要候发事件通知 Observe

㈥ 如何用RxJava2.0.7和Retrofit2.2.0优雅的实现网络请求

RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。

如果是Android开发的话,可以使用RxAndroid,这是对RxJava的一个扩展,结合sqare公司的retrofit可以很轻松的完成网络的访问。

我们知道,在Android中异步操作一般使用AsycTask来完成,但是AsycTask有很多缺点,如不能方便的终止任务的执行等。

RxAndroid完全可以替代AsycTask来完成各种异步操作,而且还有BindActivity和BindFragment方法,你根本不需要考虑异步操作时的Activity和Fragment的生命周期问题,还有更加强大的的链式调用,可以使程序很简洁。

EventBus有个缺点就是凡是使用了EventBus的类都不能进行混淆了,否则Evnetbus就找不到OnEvent方法了。

以上,推荐使用RxAndroid。

㈦ 如何用RxJava2.0.7和Retrofit2.2.0优雅的实现网络请求

rxjava+retrofit请求网络为什么抛出数组越界异常主线程默认有Runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该线程在执行完之后就退出了。所以当我们需要让该线程监听某项事务时,就得让线程一直不退出,runloop就是这么一个循环,没有事件的时候,一直卡着,有事件来临了,执行其对应的函数。RunLoop,正如其名所示,是线程进入和被线程用来相应事件以及调用事件处理函数的地方.需要在代码中使用控制语句实现RunLoop的循环,也就是说,需要代码提供while或者for循环来驱动RunLoop.在这个循环中,使用一个runLoop对象[NSRunloopcurrentRunloop]执行接收消息,调用对应的处理函数.

㈧ 如何用 Retrofit 2 在安卓上实现 HTTP 访问

通常,笔者在所有项目中都会启用 JRebel for Android。这是一个 Android Studio 的插件。“启用它”基本上意味着,只需点击一下自定义按钮就能运行应用,其余所有工作都交给它了。JRebel for Android 对安卓开发者来说是一款提升效率的工具,它可以在运行着的设备和模拟器上即时更新代码。这本质上意味着在开发应用时,你不必浪费宝贵的时间来等待应用重启,并因此而中途放弃这些应用的状态记录。总之特别棒!
说明一下,我在 ZeoTurnaround 公司工作,也就是创造JRebel for Android的公司。但它真的很好用,你值得一试。
Android Studio 2.0附带的新模拟器用着也很爽。现在,MainActivity 类的模拟器屏幕被激活了。
点一下浮动按钮,出现 snackbar。看起来不错。让我们随意更改一段代码,检验一下代码重新加载的功能。笔者首先想到的是修改 snackbar 的字符串值。
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
Snackbar.make(view, “Super fast hello world”, Snackbar.LENGTH_LONG)
.setAction(“Action”, null).show();
}
});

注意看,我们保存了一个文件,点击了一下按钮,接着模拟器上的代码就重新加载了。现在一切就绪!也就是说,我们可以研究 Retrofit 2 到底有什么用处了。
Retrofit 2 是一个类型安全的 HTTP 客户端,适用于安卓(及 Java)。但首先,它也是一个库。所以我们要先声明依赖。这个容易。不过,请注意,我们需要显式依赖gson 转换器,将 JSON 应答转换为 model 类。这与Retrofit 1不同。所以需要注意一下。
Add these two lines to the build.gradle file:
将这两行代码加到 build.gradle 文件中去:
compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta2’
compile ‘com.squareup.retrofit2:gson-converter:2.0.0-beta2’

Retrofit 的主要功能是可以在运行时生成代码,发送 HTTP服务查询请求。开发者只需写一个“说明”接口即可。假设我们有如下的一个 model 类:
通过这个我们可以创建一个名为*GithubService*的接口,用于实现 HTTP 通信。

public interface GitHubService {
@GET(“repos/{owner}/{repo}/contributors”)
Call<List<Contributor>> repoContributors(
@Path(“owner”) String owner,
@Path(“repo”) String repo);
}

This is the simplest example, we add the @GET annotation on an interface method and provide the path part of the URL that we want to expose it on. Conveniently, the method parameters can be referenced in the path string so you won’t need to jump through hoops to set those. Additionally, with other annotations you can specify query parameters, POST request body and so on:
@Query(“key”) — for GET request query parameter
@QueryMap — for the map of parameters
@Body — use it with the @POST annotation to provide the query body content.
这是一个最简单的例子。我们在接口方法中加入 @GET 注解,并且提供想要展示的 URL 的**path**部分。方便的是,由于可以在 path 字符串中引用方法参数,因此我们无需跳出循环再重新设定。另外,通过这些注解,你可以设定查询参数,以及 POST 请求主体等等:
@Query(“key”)  -- 用于GET请求查询参数
@QueryMap -- 用于参数映射
@Body -- 与@POST注解一起使用,提供查询主体内容
下面,为了能在运行时使用这个接口,我们需要构建一个 Retrofit 对象:

interface GitHubService {
@GET("repos/{owner}/{repo}/contributors")
Call<List<Contributor>> repoContributors(
@Path("owner") String owner,
@Path("repo") String repo);

public static final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}

笔者倾向于在包含网站请求的接口内使用 Retrofit builder。这么做并不是想让它变得复杂难懂。而是处于通用配置的考虑。例如,我们有默认的转换器,将 JSON 响应对象转为 Java 对象,但是,即使在每个 service 中复制粘贴一遍,也好过使用单一的抽象类,后者很容易造成泄漏。
With these pieces in place, we just need to perform the network call:
the specification of our queries
the Retrofit object builder 准备好这些代码后,我们只需发出网络请求:
请求的说明
Retrofit对象builder
为了实现*GitHubService*接口,需要初始化一个用于执行 HTTP 查询请求的 Call 对象。

GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
Call<List<Contributor>> call = gitHubService.repoContributors(“square”, “retrofit”);
List<Contributor> result = call.execute().body();

另外,有人可能也会选择设定请求的时间,让它成为异步请求,同时在执行完毕后提供 callback。

call.enqueue(new Callback<List<Contributor>>() {
@Override
public void onResponse(Response<List<Contributor>> response, Retrofit retrofit) {
// handle success
}

@Override
public void onFailure(Throwable t) {
// handle failure
}
});

听起来超简单!我们来处理一下 UI,然后写入代码。在浮动按钮的应用模板下,我们需要修改 content_main.xml 文件。笔者添加了一个发起请求查询的按钮,以及一个用以显示请求结果的文本区域:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fetch"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="151dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text=""
android:id="@+id/textView"
android:layout_above="@+id/button"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:textIsSelectable="false" />

第一次执行时,你的网络请求代码看起来可能是这样的:

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
Call<List<Contributor>> call = gitHubService.repoContributors(“square”, “retrofit”);
String result = call.execute().body().toString();
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(result);
}
});

这段代码自然无法运行。安卓框架不允许用户在 UI 线程中执行网络请求。UI 线程只应该用来处理一些用户输入。在这个线程中执行任何引起长时间阻塞的操作都会让用户体验变得非常糟糕。
因此,我们需要重构这段代码,把网络请求移入后台线程。使用 JRebel for Android 可以不费任何时间就搞定这事。我们将代码提取到 AsyncTask -- 这是一个在安卓上运行大型运算的默认框架。AsyncTask不太好看,它的具体运行方式也不算清洁,例如每次我们点击按钮时它都会去创建一个 Retrofit 对象。但是能用就行。

private class NetworkCall extends AsyncTask<Call, Void, String> {
@Override
protected String doInBackground(Call… params) {
try {
Call<List<Contributor>> call = params[0];
Response<List<Contributor>> response = call.execute();
return response.body().toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(String result) {
final TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(result);
}
}

接着,从 EventListener 中调用它:
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GitHubService gitHubService = GitHubService.retrofit.create(GitHubService.class);
final Call<List<Contributor>> call = gitHubService.repoContributors("square", "retrofit");
new NetworkCall().execute(call);
}
});

好啦,现在代码可以运行了。文本视图会根据 HTTP 请求的结果实时刷新。

现在,这个框架应用程序已经完成了,代码顺利构建并运行完毕。你可以自己去试试 Retrofit和JRebel for Android 。随意修改一些代码,检查一下新代码构成的应用程序运行效果如何,也不会浪费任何时间。尝试为 Contributor 类增加几个区域,替换 contributor 组件的 文本视图,更改 HTTP 的端点,将请求发往另一个站点。一切尽在你掌握!
在本文中,我们了解了如何使用 Retrofit 2 创建一个发送网络请求的简易框架应用程序。程序的代码可以在 Github 上找到。对本文的最佳使用方式是,将它看作一篇快速指导,根据你的侧重点写一段自己的代码,接着复制这个应用程序的代码,导入 Android studio,然后试试你自己的代码吧!

㈨ 如何用 Retrofit 2 在安卓上实现 HTTP 访问

1、通过配置gradle配置将Retrofit框架引入项目。
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

2、编写API服务代码
public interface ApiService {
@GET("service/getIpInfo.php")
Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
}

3.定义接收数据的response
public class GetIpInfoResponse extends BaseResponse {
public IpInfo data;
}

4.请求数据并显示
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ENDPOINT)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);

mProgressBar.setVisibility(View.VISIBLE);

Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");
call.enqueue(new Callback<GetIpInfoResponse>() {
@Override
public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
mProgressBar.setVisibility(View.GONE);
GetIpInfoResponse getIpInfoResponse = response.body();
mTvContent.setText(getIpInfoResponse.data.country);
}

@Override
public void onFailure(Throwable t) {
mProgressBar.setVisibility(View.GONE);
mTvContent.setText(t.getMessage());
}
});

㈩ 如何用 Retrofit 2 在安卓上实现 HTTP 访问

Retrofit是Square Inc.发布在开源社区的一款令人叹为观止的工具。它是一个类型安全的 HTTP 客户端,适用于安卓和 Java 应用。
类型安全 HTTP 客户端主要意味着,你只需关心发送出去的网络请求的语义,而不必考虑 URL 构建的细节,以及参数设定是否正确之类的事。Retrofit应对这些易如反掌,你只需写几个接口即可。就是这么简单!
我们通过一个例子来看看它是怎么实现的。笔者已经把这里所有的代码都放在了 Github 的 资源库里。如你所知,最好的学习方法就是查看这些代码,自己调试调试。
首先,笔者在 Android Studio 里建了一个空项目。老实说,每次看到欢迎界面上出现的那堆有关兼容性、以及应用所支持的 API 的选项,笔者都会感到非常迷茫。

好在我们只是弄个“玩具”项目而已,因此我们可以大胆地选择最新的 SDK,然后快速掠过项目向导,进入我们伟大的“hello world”安卓应用。
如果你自己不想纠结这些选项,可以直接点击这个 Github 的链接,导入笔者提交的现成项目:Floating button app skeleton.
通常,笔者在所有项目中都会启用 JRebel for Android。这是一个 Android Studio 的插件。“启用它”基本上意味着,只需点击一下自定义按钮就能运行应用,其余所有工作都交给它了。JRebel for Android 对安卓开发者来说是一款提升效率的工具,它可以在运行着的设备和模拟器上即时更新代码。这本质上意味着在开发应用时,你不必浪费宝贵的时间来等待应用重启,并因此而中途放弃这些应用的状态记录。总之特别棒!
说明一下,我在 ZeoTurnaround 公司工作,也就是创造JRebel for Android的公司。但它真的很好用,你值得一试。
Android Studio 2.0附带的新模拟器用着也很爽。现在,MainActivity 类的模拟器屏幕被激活了。
点一下浮动按钮,出现 snackbar。看起来不错。让我们随意更改一段代码,检验一下代码重新加载的功能。笔者首先想到的是修改 snackbar 的字符串值。
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
Snackbar.make(view, “Super fast hello world”, Snackbar.LENGTH_LONG)
.setAction(“Action”, null).show();
}
});

注意看,我们保存了一个文件,点击了一下按钮,接着模拟器上的代码就重新加载了。现在一切就绪!也就是说,我们可以研究 Retrofit 2 到底有什么用处了。
Retrofit 2 是一个类型安全的 HTTP 客户端,适用于安卓(及 Java)。但首先,它也是一个库。所以我们要先声明依赖。这个容易。不过,请注意,我们需要显式依赖gson 转换器,将 JSON 应答转换为 model 类。这与Retrofit 1不同。所以需要注意一下。
Add these two lines to the build.gradle file:
将这两行代码加到 build.gradle 文件中去:
compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta2’
compile ‘com.squareup.retrofit2:gson-converter:2.0.0-beta2’

Retrofit 的主要功能是可以在运行时生成代码,发送 HTTP服务查询请求。开发者只需写一个“说明”接口即可。假设我们有如下的一个 model 类:
通过这个我们可以创建一个名为GithubService的接口,用于实现 HTTP 通信。

阅读全文

与retrofit2可以实现哪些网络请求相关的资料

热点内容
佳能ts3180网络连接 浏览:795
网络游戏第一门户站电脑端 浏览:465
苹果没有网络的时候wifi自动断开 浏览:878
基督网络诗你在哪里 浏览:120
千兆网线连接上了但是没网络 浏览:214
临沭机械行业网络营销 浏览:977
苹果网络最近不好用 浏览:548
网络无线桥接设置教程 浏览:152
小学生如何防电信网络诈骗 浏览:492
苹果手机换完主板网络不好 浏览:555
路由器电信定制版能用广电网络 浏览:378
路由器上安装网络检测 浏览:644
网络电话能查出来哪些电话 浏览:523
做好网络安全应急保障 浏览:176
梧桐山有网络信号 浏览:459
移动网络怎么看iptv 浏览:671
小米还原网络设置数据用不了 浏览:784
app网络什么特点 浏览:610
怎么连自家wifi网络拒绝接入 浏览:5
电信网络猫的信号显示 浏览:18

友情链接