这篇文章主要回顾之前的MYangtzeu App教程的联网请求方法和json解析套路,主要目的是实现左侧菜单数据的联网获取。

1、先上请求地址实体类Constants.java

package com.vitoyan.myangtzeu.utils;

/**
* 作者:Vito-Yan
* 作用:常量类,配置联网请求地址
*/
public class Constants { /**
* 联网请求的ip和端口
*/
public static final String BASE_URL = "http://10.155.106.108:9090/web_home";
// public static final String BASE_URL = "http://192.168.191.1:8080/web_home"; // public static final String BASE_URL = "http://10.0.2.2:8080/web_home"; /**
* 新闻中心的网络地址
*/
public static final String HOME_PAGER_URL = BASE_URL+"/static/api/news/categories.json";
}

2、解析Json后的实体类HomePageBean.java

package com.vitoyan.myangtzeu.pojo;

import java.util.List;

/**
* 作者:Vito-Yan
* 作用:新闻中心解析后对应的数据
*/
public class HomePagerBean { private List<DetailPagerData> data;
private List extend;
private int retcode; public List<DetailPagerData> getData() {
return data;
} public void setData(List<DetailPagerData> data) {
this.data = data;
} public List getExtend() {
return extend;
} public void setExtend(List extend) {
this.extend = extend;
} public int getRetcode() {
return retcode;
} public void setRetcode(int retcode) {
this.retcode = retcode;
} @Override
public String toString() {
return "NewsCenterPagerBean2{" +
"data=" + data +
", extend=" + extend +
", retcode=" + retcode +
'}';
} public static class DetailPagerData{
private int id;
private String title;
private int type;
private String url;
private String url1;
private String dayurl;
private String excurl;
private String weekurl;
private List<ChildrenData> children; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public int getType() {
return type;
} public void setType(int type) {
this.type = type;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getUrl1() {
return url1;
} public void setUrl1(String url1) {
this.url1 = url1;
} public String getDayurl() {
return dayurl;
} public void setDayurl(String dayurl) {
this.dayurl = dayurl;
} public String getExcurl() {
return excurl;
} public void setExcurl(String excurl) {
this.excurl = excurl;
} public String getWeekurl() {
return weekurl;
} public void setWeekurl(String weekurl) {
this.weekurl = weekurl;
} public List<ChildrenData> getChildren() {
return children;
} public void setChildren(List<ChildrenData> children) {
this.children = children;
} @Override
public String toString() {
return "DetailPagerData{" +
"id=" + id +
", title='" + title + '\'' +
", type=" + type +
", url='" + url + '\'' +
", url1='" + url1 + '\'' +
", dayurl='" + dayurl + '\'' +
", excurl='" + excurl + '\'' +
", weekurl='" + weekurl + '\'' +
", children=" + children +
'}';
} public static class ChildrenData{
private int id;
private String title;
private int type;
private String url; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public int getType() {
return type;
} public void setType(int type) {
this.type = type;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} @Override
public String toString() {
return "ChildrenData{" +
"id=" + id +
", title='" + title + '\'' +
", type=" + type +
", url='" + url + '\'' +
'}';
}
}
}
}

3、使用xUtils3联网请求数据,使用前自行下载modules

/**
* 使用xUtils3联网请求数据
*/
private void getDataFromNet() { RequestParams params = new RequestParams(Constants.HOME_PAGER_URL);
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
long endTime = SystemClock.uptimeMillis();
long passTime = endTime - startTime; LogUtil.e("xUtils3--passTime==" + passTime); LogUtil.e("使用xUtils3联网请求成功==" + result); //缓存数据
CacheUtils.putString(context,Constants.HOME_PAGER_URL,result); //解析json数据和显示数据
processData(result); //设置适配器 } @Override
public void onError(Throwable ex, boolean isOnCallback) {
LogUtil.e("使用xUtils3联网请求失败==" + ex.getMessage());
} @Override
public void onCancelled(CancelledException cex) {
LogUtil.e("使用xUtils3-onCancelled==" + cex.getMessage());
} @Override
public void onFinished() {
LogUtil.e("使用xUtils3-onFinished");
}
}); }

4、解析Json,这里使用Gson解析

/**
* 解析json数据:1,使用系统的API解析json;2,使用第三方框架解析json数据,例如Gson,fastjson
*
* @param json
* @return
*/
private HomePagerBean parsedJson(String json) {
// Gson gson = new Gson();
// HomePagerBean bean = gson.fromJson(json,HomePagerBean.class);
return new Gson().fromJson(json, HomePagerBean.class);
}

5、解析Json数据和显示数据

/**
* 解析json数据和显示数据
*
* @param json
*/
private void processData(String json) { HomePagerBean bean = parsedJson(json);
// HomePagerBean2 bean = parsedJson2(json);
// String title = bean.getData().get(0).getChildren().get(1).getTitle(); // LogUtil.e("使用Gson解析json数据成功-title==" + title);
String title2 = bean.getData().get(0).getChildren().get(1).getTitle();
LogUtil.e("使用Gson解析json数据成功HomePagerBean2-title2-------------------------==" + title2);
//给左侧菜单传递数据
data = bean.getData(); MainActivity mainActivity = (MainActivity) context;
//得到左侧菜单
LeftmenuFragment leftmenuFragment = mainActivity.getLeftmenuFragment(); //添加详情页面
detaiBasePagers = new ArrayList<>();
detaiBasePagers.add(new NewsMenuDetailPager(context,data.get(0)));//新闻详情页面
detaiBasePagers.add(new News1MenuDetailPager(context));//新闻1详情页面
detaiBasePagers.add(new News2MenuDetailPager(context));//新闻2详情页面
detaiBasePagers.add(new News3MenuDetailPager(context));//新闻3详情页面
detaiBasePagers.add(new News4MenuDetailPager(context));//新闻4详情页面 //把数据传递给左侧菜单
leftmenuFragment.setData(data); }

6、在LeftmenuFragment中接受数据

/**
* 接收数据
* @param data
*/
public void setData(List<HomePagerBean.DetailPagerData> data) {
this.data = data;
for(int i=0;i<data.size();i++){
LogUtil.e("title=="+data.get(i).getTitle());
} //设置适配器
adapter = new LeftmenuFragmentAdapter();
listView.setAdapter(adapter); //设置默认页面
swichPager(prePosition); }

联网请求数据:Android篇的更多相关文章

  1. for循环中进行联网请求数据、for循环中进行异步数据操作,数据排序错乱问题解决;

    for循环中进行联网请求数据,由于网络请求是异步的,第一个网络请求还没有回调,第二次第三次以及后续的网络请求又已经发出去了,有可能后续的网络请求会先回调:这时我们接收到的数据的排序就会错乱:怎么才能让 ...

  2. Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)

    问题描写叙述 当我们使用SpringMVC作为服务端的框架时,有时不仅仅要应对web前端(jsp.javascript.Jquery等)的訪问请求,有时还可能须要响应Android和JavaSE(桌面 ...

  3. Java服务器对外提供接口以及Android端向服务器请求数据

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...

  4. [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换

    [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...

  5. android异步向服务器请求数据

    下面就android向服务器请求数据的问题分析如下: 1.在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求数据: ...

  6. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  7. java攻城狮之路(Android篇)--Activity生命

    一:Activity的激活 1.写一个类 extends Activity Activity是android的四大组件之一.Activity的激活分为显式意图激活和隐式意图激活.如果一个activit ...

  8. java攻城狮之路(Android篇)--与服务器交互

    一.图片查看器和网页源码查看器 在输入地址的是不能输入127.0.0.1 或者是 localhost.ScrollView :可以看成一个滚轴 可以去包裹很多的控件在里面 练习1(图片查看器): pa ...

  9. 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)

    新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...

随机推荐

  1. docker部署postgresql时,data目录不生效的问题探究

    今天用docker部署postgresql,用的是官方的镜像.结果挂载完 /var/lib/postgresql/data目录后,和容器里的目录其实并没有挂载成功. 母机上的目录并没有成功挂载到容器里 ...

  2. mysql 高级

    Sql优化: 1.SELECT语句中避免使用 *, 尽量根据业务需求按字段进行查询 举例:如果表中有个字段用的是clob或者是blob这种大数据字段的话, 他们的查询应该根据业务需要来进行指定字段的查 ...

  3. 爬虫技术实现空间相册采集器V.0.0.1版本

    一.    功能需求分析: 在很多时候我们需要做这样一个事情:我们想把我们QQ空间上的相册高清图像下载下来,怎么做?到网上找软件?答案是否定的,理由之一:网上很多软件不知有没有病毒,第二它有可能捆了很 ...

  4. c语言static关键字的理解

    static 一.概述 在c语言中static恰当的使用能让程序更加完美,细节上的严谨,代码会更好,也更利于程序的维护与扩展. 而static使用灵活,且又有两种完全无关的用法,所以整理总结一下. 二 ...

  5. Mysql原理与优化

    原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c1 ...

  6. 移动开发的捷径:3种方式轻松创建webapp

    移动开发行业发展迅速,为迎合用户的需求,大多数传统互联网公司在主导web网站的同时还需兼顾移动开发方向.在已有PC端网站的基础上,考虑到人力.成本和技术.开发周期等因素,许多公司会选择开发快速.维护便 ...

  7. AppiumDesktop录制脚本

    AppiumDesktop启动页面: 启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desi ...

  8. MySQL之日期时间类型

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  9. CentOS6.5-安装yum方法

    1.卸载原有系统中的yumrpm –qa | grep yum | xargs rpm -e --nodeps (xargs 把rpm –qa | grep yum传来的每一行信息 都用xargs后面 ...

  10. mysql 不同索引的区别和适用情况总结

    最近在做sql优化,看到一篇有关sql索引不错的文章,转载一下. 一.索引类型 普通索引:INDEX 允许出现相同的索引内容 (normal) 唯一索引:UNIQUE 不可以出现相同的值,可以有NUL ...