【Android】使用 Retrofit2 发送异步网络请求的简单案例

简介: **摘要:**Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。

前言

Retrofit是一个针对Android和Java平台的类型安全的HTTP客户端库。它允许开发者使用简洁而直观的方式来定义HTTP请求,从而简化了与RESTful API交互的过程。Retrofit允许开发者将API请求映射到Java接口,并提供了许多方便的注解来指定请求的参数、HTTP方法、请求头等信息。另外,Retrofit还提供了内置的JSON转换器,可以轻松地将服务器响应的JSON数据映射到Java对象上。这使得在Android应用中进行网络请求变得更加简单和可靠。Retrofit被广泛应用于Android应用的网络层开发中。


操作步骤

  1. 添加网络权限到AndroidManifest.xml清单文件

为了让Android应用程序能够使用互联网进行通信,需要在AndroidManifest.xml文件中添加网络权限声明。<uses-permission android:name="android.permission.INTERNET"/> 这个权限应该添加到 AndroidManifest.xml 文件中的 <manifest> 标签内部。

下面是一个示例 AndroidManifest.xml 文件的片段,展示了 <uses-permission> 标签的位置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        ...>
        ...
    </application>
</manifest>

确保将 <uses-permission> 标签放置在 <application> 标签的外面,但在 <manifest> 标签之内。这样可以确保权限声明在应用程序的范围内生效,而不是仅在某个活动或服务中生效。

在添加 <uses-permission> 标签后,你的应用程序将被授予使用互联网的权限。这是必要的,如果你的应用程序需要与网络进行通信,例如通过网络请求获取数据或与远程服务器进行交互。

  1. 添加retrofit和converter-gson依赖库

build.gradle.kts文件的dependencies部分添加以下两行依赖:

implementation("com.squareup.retrofit2:retrofit:2.5.0")
implementation("com.squareup.retrofit2:converter-gson:2.0.2")

完整的dependencies部分示例:

dependencies {
    implementation("com.squareup.retrofit2:retrofit:2.5.0")
    implementation("com.squareup.retrofit2:converter-gson:2.0.2")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.8.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
  1. 同步Gradle

在添加依赖库后,记得点击Android Studio工具栏中的“Sync Project with Gradle Files”按钮,以确保Gradle文件同步。

  1. 创建接收服务器返回数据的类

下面是一个名为Result的示例类,用于接收服务器返回的数据:

public class Result<T> {
   
   
    private Integer code;
    private String msg;
    private T data;

    public Integer getCode() {
   
   
        return code;
    }

    public void setCode(Integer code) {
   
   
        this.code = code;
    }

    public String getMsg() {
   
   
        return msg;
    }

    public void setMsg(String msg) {
   
   
        this.msg = msg;
    }

    public T getData() {
   
   
        return data;
    }

    public void setData(T data) {
   
   
        this.data = data;
    }
}
  1. 创建用于描述网络接口的类

下面是一个名为Api的示例接口类,用于描述网络请求的接口:

public interface Api {
   
   
    @GET("api/user/{id}")
    Call<Result<User>> getById(@Path("id") Integer id);
}
  1. 创建Retrofit实例

MainActivity类中创建Retrofit实例,如下所示:

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

上述代码中的baseUrl是要请求的API的基本URL。

  1. 创建网络请求接口实例

MainActivity类中创建网络请求接口的实例,如下所示:

Api api = retrofit.create(Api.class);
  1. 创建并发送异步网络请求

MainActivity类中发送异步网络请求,如下所示:

Call<Result<User>> call = api.getById(2);

call.enqueue(new Callback<Result<User>>() {
   
   
    @Override
    public void onResponse(Call<Result<User>> call, Response<Result<User>> response) {
   
   
        Result<User> body = response.body();
        if(body == null) {
   
   
            return;
        }
        User user = response.body().getData();
        if(user == null) {
   
   
            return;
        }
        Toast.makeText(MainActivity.this, "请求成功:" + user.getUsername(), Toast.LENGTH_LONG).show();
    }

    @Override
    public void onFailure(Call<Result<User>> call, Throwable t) {
   
   
        Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_LONG).show();
    }
});

上述代码中的getById(2)是一个示例,你需要根据实际情况替换成你的网络请求方法和参数。

以上就是使用Retrofit发送异步网络请求的基本步骤。可以根据实际需求进行进一步的修改和扩展。


参考资料

目录
相关文章
|
17天前
|
人工智能 运维 监控
阿里云携手神州灵云打造云内网络性能监测标杆 斩获中国信通院高质量数字化转型十大案例——金保信“云内网络可观测”方案树立云原生运维新范式
2025年,金保信社保卡有限公司联合阿里云与神州灵云申报的《云内网络性能可观测解决方案》入选高质量数字化转型典型案例。该方案基于阿里云飞天企业版,融合云原生引流技术和流量“染色”专利,解决云内运维难题,实现主动预警和精准观测,将故障排查时间从数小时缩短至15分钟,助力企业降本增效,形成可跨行业复制的数字化转型方法论。
|
2月前
|
API 数据处理 Android开发
Android网络请求演变:从Retrofit到Flow的转变过程。
通过这个比喻,我们解释了 Android 网络请求从 Retrofit 到 Flow 的转变过程。这不仅是技术升级的体现,更是反映出开发者在面对并发编程问题时,持续探索和迭求更好地解决方案的精神。未来,还会有更多新的技术和工具出现,我们期待一同 witness 这一切的发展。
94 36
|
2月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
88 15
|
8月前
|
安全 算法 网络安全
网络安全与信息安全:构建数字世界的坚固防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系社会秩序、保障个人隐私和企业机密的关键防线。本文旨在深入探讨网络安全漏洞的本质、加密技术的前沿进展以及提升公众安全意识的重要性,通过一系列生动的案例和实用的建议,为读者揭示如何在日益复杂的网络环境中保护自己的数字资产。
本文聚焦于网络安全与信息安全领域的核心议题,包括网络安全漏洞的识别与防御、加密技术的应用与发展,以及公众安全意识的培养策略。通过分析近年来典型的网络安全事件,文章揭示了漏洞产生的深层原因,阐述了加密技术如何作为守护数据安全的利器,并强调了提高全社会网络安全素养的紧迫性。旨在为读者提供一套全面而实用的网络安全知识体系,助力构建更加安全的数字生活环境。
|
5月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
481 7
|
7月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
76 3
|
9月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
158 56
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
7月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
8月前
|
设计模式 开发者 UED
深入理解Kotlin中的异步网络请求处理
深入理解Kotlin中的异步网络请求处理