【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发送异步网络请求的基本步骤。可以根据实际需求进行进一步的修改和扩展。


参考资料

目录
相关文章
|
4月前
|
安全 算法 网络安全
网络安全与信息安全:构建数字世界的坚固防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系社会秩序、保障个人隐私和企业机密的关键防线。本文旨在深入探讨网络安全漏洞的本质、加密技术的前沿进展以及提升公众安全意识的重要性,通过一系列生动的案例和实用的建议,为读者揭示如何在日益复杂的网络环境中保护自己的数字资产。
本文聚焦于网络安全与信息安全领域的核心议题,包括网络安全漏洞的识别与防御、加密技术的应用与发展,以及公众安全意识的培养策略。通过分析近年来典型的网络安全事件,文章揭示了漏洞产生的深层原因,阐述了加密技术如何作为守护数据安全的利器,并强调了提高全社会网络安全素养的紧迫性。旨在为读者提供一套全面而实用的网络安全知识体系,助力构建更加安全的数字生活环境。
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
130 7
|
3月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
39 3
|
5月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
135 56
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
3月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
4月前
|
设计模式 开发者 UED
深入理解Kotlin中的异步网络请求处理
深入理解Kotlin中的异步网络请求处理
|
5月前
|
数据采集 自然语言处理 监控
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
本文介绍了一个基于Python Django框架开发的新媒体网络舆情数据爬取与分析系统,该系统利用Scrapy框架抓取微博热搜数据,通过SnowNLP进行情感分析,jieba库进行中文分词处理,并以图表和词云图等形式进行数据可视化展示,以实现对微博热点话题的舆情监控和分析。
222 3
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
|
5月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
5月前
|
网络协议 网络架构
【网络工程师配置篇】BGP联盟配置案例及分析(超级干货)
【网络工程师配置篇】BGP联盟配置案例及分析(超级干货)
321 2