这里只简单介绍一下我自己的demo,具体原理学习还是建议阅读一下官方的文档或者别人整理好的内容。我的demo可以作为实际跑通的参考,加深理解。可能写的本身也不完美。

·准备工作:注册聚合数据的账号→申请新闻头条的数据→生成一条请求(get)

·使用android studio的朋友可以引入依赖,eclipse的朋友请找网上下载gson和okhttp3的jar包,这里就不给下载地址了

开始保姆级别的流程

百度聚合数据,注册,登录,在这里找到免费,然后选择新闻头条

我们先来测试一下数据,顺便获取一下之后要用的请求地址

http://v.juhe.cn/toutiao/index?type=top&key=APPKEY把这个APPKEY改为系统为你生成的

然后引入依赖

implementation("com.squareup.okhttp3:okhttp:4.0.1")
implementation 'com.google.code.gson:gson:2.7'
//okhttp相关部分
private void getNetSource(){OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(url).build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException {String da = "";da = response.body().string();initData(da);Log.d("database","data is----"+da);}});}

现在的版本下,网络请求不可以在UI线程中进行,不过没关系,这个方式可以替我们避免这个问题。

url为你的请求地址,在logcat里可以查看到你请求到的数据。

//gson解析
private void initData(String da) {if (da != null) {list.clear();Gson gson=new Gson();NewsEntity newsEntity=gson.fromJson(da,NewsEntity.class);List<NewsEntity.DataBean> newsList=newsEntity.getResult().getData();if(newsList.size()>0){list.addAll(newsList);}Log.d("database","data is--"+list.toString());Log.d("database", "setData is--" + list.size());}}

然后在是用来接收数据的类,这个比较重要

我们先来分析一下拿到的json数据是什么样子的

可以说算是看起来还是比一般情况较复杂的嵌套结构

这里不使用工具来生成用来接收的类,毕竟是刚开始入手

public class NewsEntity implements Serializable{private String reason;private Result result;public String getReason() {return reason;}public void setReason(String reason) {this.reason = reason;}public Result getResult() {return result;}public void setResult(Result result) {this.result = result;}public static class Result{private String stat;private List<DataBean> data;public String getStat() {return stat;}public void setStat(String stat) {this.stat = stat;}public List<DataBean> getData() {return data;}public void setData(List<DataBean> data) {this.data = data;}}public static class DataBean implements Serializable{private String uniquekey;private String title;private String date;private String category;private String author_name;private String url;private String thumbnail_pic_s;private String thumbnail_pic_s02;private String thumbnail_pic_s03;public String getUniquekey() {return uniquekey;}public void setUniquekey(String uniquekey) {this.uniquekey = uniquekey;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getAuthor_name() {return author_name;}public void setAuthor_name(String author_name) {this.author_name = author_name;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getThumbnail_pic_s() {return thumbnail_pic_s;}public void setThumbnail_pic_s(String thumbnail_pic_s) {this.thumbnail_pic_s = thumbnail_pic_s;}public String getThumbnail_pic_s02() {return thumbnail_pic_s02;}public void setThumbnail_pic_s02(String thumbnail_pic_s02) {this.thumbnail_pic_s02 = thumbnail_pic_s02;}public String getThumbnail_pic_s03() {return thumbnail_pic_s03;}public void setThumbnail_pic_s03(String thumbnail_pic_s03) {this.thumbnail_pic_s03 = thumbnail_pic_s03;}}
}

比较长,是不是?

我们先来慢慢地脱她衣服,最外层2个reason,result。 result里面stat data。然后data里面才是我们要的数据

List<NewsEntity.DataBean> newsList=newsEntity.getResult().getData();结合这条慢慢理解吧,可以配合其他人写的文章,这里不做再详细的解释了,返回去慢慢对照这个NewsEntity我相信大家都看明白了。

最后付一下可有可无的activity的代码

/*** created by jackye* school zjsr* email 9401******qq.com* 2019/8/15*/
public class NewsActivity extends AppCompatActivity {private String url="http://v.juhe.cn/toutiao/index?type=top&key=你的key";private ArrayList<NewsEntity.DataBean> list = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_news);getNetSource();}private void getNetSource(){OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(url).build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException {String da = "";da = response.body().string();initData(da);Log.d("database","data is----"+da);}});}private void initData(String da) {if (da != null) {list.clear();Gson gson=new Gson();NewsEntity newsEntity=gson.fromJson(da,NewsEntity.class);List<NewsEntity.DataBean> newsList=newsEntity.getResult().getData();if(newsList.size()>0){list.addAll(newsList);}Log.d("database","data is--"+list.toString());Log.d("database", "setData is--" + list.size());}}
}

最后,生活愉快,下次再见

从零使用okhttp和gson解析聚合数据的新闻头条API相关推荐

  1. gson解析php,php,android_关于 Gson 解析JSON数据。。。,php,android - phpStudy

    关于 Gson 解析JSON数据... 1.首先,我是从服务器端传回来的JSON数据如下: {"info":"succeed","user_id&qu ...

  2. Okhttp源码分析以及Google Gson解析json数据实例

    Okhttp Github的Okhttp OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 透明的GZIP压缩减少响 ...

  3. JSONObject 和 GSON 解析 JSON 数据详解(转)

    转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...

  4. Gson解析JSON数据中动态未知字段key的方法

    转载自:https://blog.csdn.net/jdsjlzx/article/details/76785239 有时在解析json数据中的字段key是动态可变的时候,由于Gson是使用静态注解的 ...

  5. Android中Gson解析json数据使用@SerializedName注解

    @SerializedName 此注解作用在属性上,表明这个属性在序列化成Json的时候,需要将名字序列化成注解的value属性指定的值. 我们有一段json数据如下: { "id" ...

  6. Android利用Gson解析Json数据

    其实,要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个 ...

  7. 调用聚合数据新闻头条API接口

    基于聚合数据新闻头条接口 支持阅读新闻类型包括: 各类社会.国内.国际.体育.娱乐.科技等资讯,更新周期5-30分钟. 新闻内容类型的多选,支持皮肤功能. 使用前需要有聚合数据账号,并实名制后通过 新 ...

  8. 免费的聚合数据新闻头条API接口调用

    基于聚合数据新闻头条接口 支持阅读新闻类型包括: 各类社会.国内.国际.体育.娱乐.科技等资讯,更新周期5-30分钟. 新闻内容类型的多选,支持皮肤功能. 使用前需要有聚合数据账号,并实名制后通过 新 ...

  9. 用聚合数据苏州实时公交API写的微信小程序

    利用聚合数据API快速写出小程序,过程简单. 1.申请小程序账号 2.进入开发 3.调用API.比如"苏州实时公交"小程序,选择的是苏州实时公交API. 苏州实时公交API文档:h ...

最新文章

  1. Duplicate class xxx
  2. SO_REUSEADDR和SO_REUSEPORT
  3. 跑步记录日期怎么改_快捷增加历史记录-鲨鱼记账App功能优化
  4. 最常见的Web服务器市场份额
  5. views 多个文件夹 netcore_优化 .net core 应用的 dockerfile
  6. 数据载入过慢?这里有一份TensorFlow加速指南
  7. vs 2012/2013 等工具中,使用正则表达式,查找、替换
  8. idea怎么创建python项目
  9. Java随机产生中文昵称
  10. 计算机监控系统在地铁中的应用有哪些,电力监控系统(PSCADA)在地铁中应用.doc
  11. 实训项目名称: 双绞线的制作
  12. linux marvell 网卡驱动,坑爹的marvell linux 网卡驱动
  13. java文本域_Java Swing JTextArea:文本域组件
  14. 中科曙光宁畅R620 G40安装Centos7识别不到硬盘
  15. 网上FLAC3D学习笔记
  16. C语言中scanf()常见的错误
  17. windows server 2012 r2 及 server 2019的sxs文件
  18. Cortex-M3/M4(2)-架构
  19. windows编程之计时器
  20. Suricata-IDS与IPS

热门文章

  1. qcustomplot 峰值_QT 本程序可读取Yokogawa 光谱仪多个数据文件(CSV格式)并寻峰 - 下载 - 搜珍网...
  2. Python员工信息作业
  3. Ae 脚本:TypeMonkey 动态文本动画
  4. 小米手机5s获得root权限的经验
  5. 为何在网络上很难赚到钱?网络副业赚钱真的很难做吗?
  6. 聪明的笨鸟(人-AI试验版)
  7. Mac 安装目前最新版本的 macOS Big Sur
  8. 手机界面设计—常识篇
  9. 一个武侠游戏的成就界面需要针对每一个成就阶段配一句话,阶段分别是:默默无闻、初涉江湖、小有所成、一代宗师。想一想你会怎么写这个文案
  10. 指标梳理对成功实施BI项目有什么意义