这篇文章主要回顾之前的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. SQL SERVER-开启xp_cmdshell

    在sql server中执行cmd命令,报以下异常. EXEC master.sys.xp_cmdshell 'dir c:/' Msg 15281, Level 16, State 1, Proce ...

  2. 前端/C# 前后台交互文件上传、下载

    试了很多方式,最终确认这个全面简单版的.废话不多说,贴码. 文件上传 input的type命名为file,即可实现文件上传.嗯~~~现在html还是很强大的.Good! 前端 单个文件上传 Html: ...

  3. 转载:img是什么元素?置换元素?

    转载: https://blog.csdn.net/kingliguo/article/details/52643594 img是什么元素? 应是行内元素,判断一个元素是行内元素,还是块元素,无非就是 ...

  4. Counting Sort(Java)

    public static void countingsort(int[] a, int n) //n = a.length { int max = a[0], min = a[0]; for(int ...

  5. css文字与排版

    目录 文字与排版样式 `font文字样式 排版样式(text) 文字半透明 文字阴影 背景和颜色 基本 背景简写 背景透明 背景缩放 列表样式 表格样式 表格边框样式 折叠边框 设置宽度和高度 表格对 ...

  6. linux 下ab压力测试

    1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试 ...

  7. 基于 docker 的yapi(快速部署)

    1.使用官方的mongodb镜像 docker run --network yapi_net --ip 172.30.0.10  -d --name yapi_mongodb --restart al ...

  8. vue 修改数据界面没有及时更新nextTick

    使用场景:有些时候,我们使用vue修改了一些数据,但是页面上的DOM还没有更新,这个时候我们就需要使用到nextTick. vm.$nextTick( [callback] ) 说明: 将回调延迟到下 ...

  9. vagrant三网详解(团队/个人开发必看) 转

    vagrant三网详解(团队/个人开发必看)   Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点. 一.端口映射(Forwarded port) 顾名思义是指把宿主计算机 ...

  10. Jetson TX1刷机

    刷机流程 https://blog.csdn.net/c406495762/article/details/70786700 注意:教程中包含两步,首先安装Ubuntu系统,然后重启安装程序,安装其他 ...