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
相关文章
- android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法
- android签名命令行,Android系统签名位置及命令
- Android面试题之Service
- android进阶之了解Android系统与开机过程
- delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串
- android vlc 中文字幕,解决Android版vlc中文乱码问题
- android 定时器重置,Android定时器延迟和重置[通俗易懂]
- 音乐标签修改 android,音乐标签修改(Star Music Tag Editor)[通俗易懂]
- android短信验证码代码,Android短信验证码自动填写实现代码
- android toast 自定义时间,Android 自定义 Toast 显示时间「建议收藏」
- Android触摸事件_android设置按钮点击事件
- Android平台GB28181接入端如何对接UVC摄像头?
- android 个人中心下拉弹回效果-PullscrollView
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )
- 【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
- 【Android NDK 开发】Android NDK 下载 ( 下载指定历史版本 NDK | Android NDK r10e - 2015 年 5 月 )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
- 【错误记录】Android Studio 集成 ARoute 编译报错 ( 兼容 support 库和 androidx 库 | add ‘tools:replace=“android:appCo )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )
- [android] 练习使用ListView(三)详解手机开发
- [android] android项目架构详解手机开发
- Android实现PHP连接MySQL进行数据交互(android通过php连接mysql)
- Android Wear不更新?原来谷歌正在憋大招
- Android仿QQ登陆窗口实现原理
- Android网络图片查看显示的实现方法
- Android中的android:layout_weight使用详解