如何用 Retrofit 2 在安卓上实现 HTTP 访问?(如何用ps修改图片上的文字)

网友投稿 823 2022-09-25

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

如何用 Retrofit 2 在安卓上实现 HTTP 访问?(如何用ps修改图片上的文字)

最近,笔者对安卓开发的兴趣愈发浓厚,而且不断尝试了许多传闻很棒的开发库 -- 大部分也真的很不错。于是打算写一个系列文章,介绍使用这些让人惊叹的库建立安卓示例应用的实践。这样,读者可以自行判断,这些库有多好用。本文是该系列的第一篇。

类型安全 HTTP 客户端主要意味着,你只需关心发送出去的网络请求的语义,而不必考虑 URL 构建的细节,以及参数设定是否正确之类的事。Retrofit应对这些易如反掌,你只需写几个接口即可。就是这么简单!

好在我们只是弄个“玩具”项目而已,因此我们可以大胆地选择最新的 SDK,然后快速掠过项目向导,进入我们伟大的「hello world」安卓应用。

说明一下,我在 ZeoTurnaround 公司工作,也就是创造JRebel for Android的公司。但它真的很好用,你值得一试。

点一下浮动按钮,出现 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(); }});

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> 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 对象:

笔者倾向于在包含网站请求的接口内使用 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> call = gitHubService.repoContributors(“square”, “retrofit”); List result = call.execute().body();

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

call.enqueue(new Callback>() { @Override public void onResponse(Response> response, Retrofit retrofit) { // handle success } @Override public void onFailure(Throwable t) { // handle failure }});

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

上一篇:一体化运维平台包含哪些功能?(运维平台有哪些功能模块)
下一篇:云平台运维是做什么的?云平台运维与传统运维区别(云运维是什么意思)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~