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


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

    为了让你的Android应用程序能够使用互联网进行通信,你需要在AndroidManifest.xml文件中添加网络权限声明。 这个权限应该添加到 AndroidManifest.xml 文件中的 标签内部。

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

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapp">
    
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <application
            ...>
            ...
        application>
    manifest>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

    添加retrofit和converter-gson依赖库

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

    implementation("com.squareup.retrofit2:retrofit:2.5.0")
    implementation("com.squareup.retrofit2:converter-gson:2.0.2")
    
    • 1
    • 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    同步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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

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

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

    创建Retrofit实例

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

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    
    • 1
    • 2
    • 3
    • 4

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

    创建网络请求接口实例

    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();
        }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

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


    参考资料

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

  • 相关阅读:
    爬取动态网页数据的软件-抓取动态网页数据的工具
    flink1.18.0 sql-client报错
    CSDN竞赛4期题解
    Python学习之CSDN21天学习挑战赛计划之11
    解决 Chrome 浏览器被毒霸篡改问题
    Swift中运算符相关内容
    POI报表的高级应用
    Nacos整合Gateway实现动态路由
    (数据科学学习手札137)orjson:Python中最好用的json库
    在 ESP 开发板上开发 UI 不再复杂
  • 原文地址:https://blog.csdn.net/qq_34988204/article/details/134497700