联网请求数据:Android篇
这篇文章主要回顾之前的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篇的更多相关文章
- for循环中进行联网请求数据、for循环中进行异步数据操作,数据排序错乱问题解决;
for循环中进行联网请求数据,由于网络请求是异步的,第一个网络请求还没有回调,第二次第三次以及后续的网络请求又已经发出去了,有可能后续的网络请求会先回调:这时我们接收到的数据的排序就会错乱:怎么才能让 ...
- Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)
问题描写叙述 当我们使用SpringMVC作为服务端的框架时,有时不仅仅要应对web前端(jsp.javascript.Jquery等)的訪问请求,有时还可能须要响应Android和JavaSE(桌面 ...
- Java服务器对外提供接口以及Android端向服务器请求数据
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...
- [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换
[Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...
- android异步向服务器请求数据
下面就android向服务器请求数据的问题分析如下: 1.在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求数据: ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- java攻城狮之路(Android篇)--Activity生命
一:Activity的激活 1.写一个类 extends Activity Activity是android的四大组件之一.Activity的激活分为显式意图激活和隐式意图激活.如果一个activit ...
- java攻城狮之路(Android篇)--与服务器交互
一.图片查看器和网页源码查看器 在输入地址的是不能输入127.0.0.1 或者是 localhost.ScrollView :可以看成一个滚轴 可以去包裹很多的控件在里面 练习1(图片查看器): pa ...
- 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)
新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...
随机推荐
- 应用shell脚本停启Tomcat
最近在工作中频繁的操作多个tomcat,顺便就简单研究了一下 一. 简介 Shell 是一种与操作系统直接交互的程序,Unix系统中叫Bourne Shell,包括以下几种 Sh—Bourne She ...
- SQLServer之创建用户定义的数据库角色
创建用户定义的数据库角色注意事项 角色是数据库级别的安全对象. 在创建角色后,可以使用 grant.deny 和revoke来配置角色的数据库级权限. 若要向数据库角色添加成员,请使用alter ro ...
- 使用git 遇见的错误使用到的命令
查看远端地址 git remote -v 需要重新添加地址 git remote set-url origin xxx 远程新的地址 git remote add origin_new 设置用户名 ...
- python day08
ascii码转换成字符:ord(str) 字符串转换成ascii:chr(int) 三种字符串 1.普通字符串 --以字符作为输出单位 print(u'abc') 显示给用户看的字符串 2.二进制字符 ...
- 安装WebLogic失败,出现”[VALIDATION] [ERROR]:INST-07004: Oracle 主目录(O) 位置包含一个或多个无效字符“解决方案
题如图 解决方案: 在管理员cmd窗口定位到jdk bin目录,然后输入以下命令 java -jar F:\java\fmw_12.2.1.3.0_wls_quick_Disk1_1of1\fmw_1 ...
- bzoj4892 [TJOI2017]DNA
bzoj4892 [TJOI2017]DNA 给定一个匹配串和一个模式串,求模式串有多少个连续子串能够修改不超过 \(3\) 个字符变成匹配串 \(len\leq10^5\) hash 枚举子串左端点 ...
- SpringBoot整合Redis及Redis工具类撰写
SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...
- docker安装与测试 及 安装docker compose
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口 ...
- Django的Models字段含义
在model中添加字段的格式一般为: field_name = field_type(**field_options) 一 field options(所有字段共用) 1 null 默认为F ...
- LVS实现负载均衡原理
负载均衡集群是load balance 集群的简写.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备有F5.NetsNetscale.这里主要是学习lvs. === ...