当前位置: 首页 > article >正文

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

添加网络权限到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> 标签的外面,但在 <application> 标签之内。这样可以确保权限声明在应用程序的范围内生效,而不是仅在某个活动或服务中生效。

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

添加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")
}

同步Gradle

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

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

下面是一个名为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;
    }
}

创建用于描述网络接口的类

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

public interface Api {
    @GET("api/user/{id}")
    Call<Result<User>> getById(@Path("id") Integer id);
}

创建Retrofit实例

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

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

请注意,上述代码中的baseUrl应该是你要请求的API的基本URL。

创建网络请求接口实例

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

Api api = retrofit.create(Api.class);

创建并发送异步网络请求

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


参考资料

https://blog.csdn.net/m0_37796683/article/details/90702095


http://www.kler.cn/news/134229.html

相关文章:

  • devops底层是怎么实现的
  • 环境配置|GitHub——解决Github无法显示图片以及README无法显示图片
  • python趣味编程-5分钟实现一个俄罗斯方块游戏(含源码、步骤讲解)
  • asp.net心理健康管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目
  • JAVA深化篇_42—— 正则表达式
  • 14 Go的类型转换
  • X3DAudio1_7.dll丢失原因,X3DAudio1_7.dll丢失怎样解决分享
  • RabbitMQ消息的可靠性
  • 单元测试实战(三)JPA 的测试
  • 【c++随笔13】多态
  • 力扣174. 寻找二叉搜索树中的目标节点(java,二叉搜索树的性质的运用)
  • vscode 创建 运行c++ 项目
  • 一文了解Word2vec 阐述训练流程
  • 第7天:信息打点-资产泄漏amp;CMS识别amp;Git监控amp;SVNamp;DS_Storeamp;备份
  • VBA之Word应用:文档(Document)的书签
  • 【Python数据结构与算法】——(线性结构)精选好题分享,不挂科必看系列
  • 函数式编程框架 functionaljava 简介
  • ClickHouse数据一致性
  • 电子学会C/C++编程等级考试2022年03月(一级)真题解析
  • linux文件IO
  • CentOS to 浪潮信息 KeyarchOS 迁移体验与优化建议
  • 【算法】二分查找-20231120
  • Leetcode—2760.最长奇偶子数组【简单】
  • ubuntu 20通过docker安装onlyoffice,并配置https访问
  • 基于Qt QList和QMap容器类示例
  • 关于缓存和数据库一致性问题的深入研究
  • 容斥 C. Strange Function改编题
  • 使用宝塔面板安装mysql
  • AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别
  • Canal+Kafka实现MySQL与Redis数据同步(一)