Android Retrofit框架请求复杂json数据
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
之前的时候看过很多的博客对于json数据进行解析,今天有时间自己亲自对json数据的解析做了练习,在这里分享自己的练习过程中的一些小问题,希望可以帮助到更多的人
这个是我需要请求的json数据,其中我们需要解析的字段是“tracks”字段
我们来简单的分析一下这个数据,从这个地方我们可以看出需要解析的字段是一个集合,集合里面有很多的对象,这里我们使用的GSON的序列化的方式来解析我们获取到的json数据
步骤1:添加Retrofit库的依赖
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
这里我们用到的是三个库Retrofit依赖库,OKhttp依赖库,还有就是Gson的依赖库。
步骤2:创建 接收服务器返回数据 的类
创建一个接收解析对象的类也就是我们通过这个json文件分析出来的类对象,由于我们这里现要求只解析tracks字段所以我们这里对于类的创建也就是简单的基于这样的一个简单的原则,这个我会在以后重点分析Gson解析json数据的时候对于这里的这个问题做进一步的分析。
这个是对tracks字段的定义(注意这里我们使用的是类外定义的方式没有用定义内部类的方式)
public class Tracks {
private int Tid;
private String title;
public int getTid() {
return Tid;
}
public void setTid(int tid) {
Tid = tid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
外层对象的Java类
public class MusicItem {
private List<Tracks> tracks;
public List<Tracks> getTracks() {
return tracks;
}
public void setTracks(List<Tracks> tracks) {
this.tracks = tracks;
}
}
步骤3:创建 用于描述网络请求 的接口
public interface Getrequest_Interface {
//http://v5.pc.duomi.com/search-ajaxsearch-searchall?kw=二胡&pi=1&pz=10
/**
* 通过配置文件的形式来配置get请求的参数
* @return 返回值表示请求到的数据
*/
//@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
@GET("search-ajaxsearch-searchall?")
Call<MusicItem> getCall(@Query("kw") String kw,@Query("pi") int pi,@Query("pz") int pz);
// 注解里传入 网络请求 的部分URL地址
// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里
// 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略
// getCall()是接受网络请求数据的方法
}
步骤4:创建 Retrofit 实例
步骤5:创建 网络请求接口实例 并 配置网络请求参数
步骤6:发送网络请求(采用最常用的异步方式)
由于这三步在开发的时候是比较密切的,所以我们可以使用封装一个函数的方式来实现这些东西
public void request() {
//步骤4:创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
//.baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
.baseUrl("http://v5.pc.duomi.com/")
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build();
// 步骤5:创建 网络请求接口 的实例
Getrequest_Interface request = retrofit.create(Getrequest_Interface.class);
//对 发送请求 进行封装
Call<MusicItem> call = request.getCall("二胡",1,10);
//步骤6:发送网络请求(异步)
call.enqueue(new Callback<MusicItem>() {
//请求成功时回调
@Override
public void onResponse(Call<MusicItem> call, Response<MusicItem> response) {
// 步骤7:处理返回的数据结果
//response.body().toString();
//System.out.println(response.body().getTracks().get(0).getTitle());
for (Tracks tracks: response.body().getTracks()) {
System.out.println(tracks.getTitle());
}
}
//请求失败时回调
@Override
public void onFailure(Call<MusicItem> call, Throwable throwable) {
System.out.println("连接失败");
}
});
}
步骤7: 处理服务器返回的数据
最后简单的输出效果就是这个样子的
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)