zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android 使用 retrofit 实现网络请求

Android网络 实现 请求 Retrofit 使用
2023-09-14 09:04:23 时间

build.gradle

dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
++    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
++    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

测试接口文档:
https://api.qqsuu.cn/doc/dm-caipu.html

先来看看请求体:
在这里插入图片描述

CaiPuService.java

public interface CaiPuService {
    @POST("https://api.qqsuu.cn/api/dm-caipu")
    // 方法参数
    Call<TestRequest> caiPu(@Query("word") String word, @Query("page") String page);
}

因为响应体数据如下:

{
    "code": 200,
    "msg": "success",
    "data": {
        "curpage": 1,
        "allnum": 10,
        "list": [
            {
                "id": 1983,
                "type_id": 81,
                "type_name": "民族菜",
                "cp_name": "西红柿炒鸡蛋",
                "zuofa": "1.把西红柿洗净,去蒂,切成象眼块;鸡蛋打入碗内,加入精盐,少许搅匀,用热油炒散。2.将炒锅放入油,烧热后放入西红柿、鸡蛋,搅均匀加入白糖、精盐、再搅炒几下,开后勾芡即成。",
                "texing": "红黄相间,味道鲜美。",
                "tishi": "",
                "tiaoliao": "",
                "yuanliao": "西红柿500克,鸡蛋2个,植物油50克,白糖25克,精盐5克,水淀粉15克。"
            }
        ]
    }
}

所以我们要新建对应的数据获和实体类data

TestRequest.java

public class TestRequest {
    String msg;
    int code;
    data data;
}

data.java

public class data {
    int curpage;
    int allnum;
    List list;
}

MainActivity.java

 new Thread(new Runnable() {
            @Override
            public void run() {
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("https://api.qqsuu.cn/api/dm-caipu/")
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
                CaiPuService caiPuService = retrofit.create(CaiPuService.class);
                Call<TestRequest> call = caiPuService.caiPu("西红柿炒鸡蛋","1");
                call.enqueue(new Callback<TestRequest>() {

                    @Override
                    public void onResponse(Call<TestRequest> call, Response<TestRequest> response) {
                        // 请求成功回调
                        TestRequest user = response.body();
                        Log.d(TAG,"成功="+user.msg+"---"+user.code+"---"+user.data.allnum+"---"+user.data.curpage+"-----"+user.data.list.toString());
                    }

                    @Override
                    public void onFailure(Call<TestRequest> call, Throwable t) {
                        // 请求失败回调
                        Log.d(TAG,"失败");
                    }

                });
            }
        }).start();

经过如上步骤就可以成功完成网络请求,获取到的数据打印如下:

成功=success---200---10---1-----[{id=1983.0, type_id=81.0, type_name=民族菜, cp_name=西红柿炒鸡蛋, zuofa=1.把西红柿洗净,去蒂,切成象眼块;鸡蛋打入碗内,加入精盐,少许搅匀,用热油炒散。2.将炒锅放入油,烧热后放入西红柿、鸡蛋,搅均匀加入白糖、精盐、再搅炒几下,开后勾芡即成。, texing=红黄相间,味道鲜美。, tishi=, tiaoliao=, yuanliao=西红柿500克,鸡蛋2个,植物油50克,白糖25克,精盐5克,水淀粉15克。}]

如果我们要提交的数据有对象类型,我们可以这么写

ApiService apiService = retrofit.create(ApiService.class);
Call<TestRequest> call = apiService.login("www.baidu.com", new Payload("123","test","test","test"));

其中 Payload 其实就是bean,然后ApiService.java可以这么写

public interface ApiService {
    // 请求方式 + 请求地址
    @POST("www.baidu.com")
    // 方法参数
    Call<TestRequest> login(@Query("url") String url, @Query("payload") Payload payload);
}

那么对应的 TestRequest.java就应该如下:

public class TestRequest {
    String url;
    Payload payload;
}

Demo下载:
链接:https://pan.baidu.com/s/1Dfah0_QbUnLM4SHtmE0O-g
提取码:5dct