解析json文本并使用handler完成三个控件文本内容的切换
2017-03-26 11:52
525 查看
Demo需求:
三个控件展示三个关键词,在资源文件获取文本,每隔5秒切换下一词,关键词展示到最后再重头开始
开发工具:Android studio
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.example.leaven.demo.MainActivity">
<TextView
android:id="@+id/te1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/te2"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/te3"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"/>
</LinearLayout>
代码:
public class MainActivity extends AppCompatActivity {
private TextView te1;
private TextView te2;
private TextView te3;
private int result;
private int end;
private int current;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
int i=msg.what;
if (end!=0&¤t==result){
if(end==1){
te1.setText(datas.get(i*3));
te2.setText(null);
te3.setText(null);
}
if(end==2){
te1.setText(datas.get(i*3));
te2.setText(datas.get(i*3+1));
te3.setText(null);
}
}
te1.setText(datas.get(i*3));
te2.setText(datas.get(i*3+1));
te3.setText(datas.get(i*3+2));
if(current!=result){
current++;
handler.sendEmptyMessageDelayed(current,5000);
}else {
current=0;
handler.sendEmptyMessageDelayed(current,5000);
}
}
};
private List<String> datas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
}
private void initview() {
te1 = (TextView) findViewById(R.id.te1);
te2 = (TextView) findViewById(R.id.te2);
te3 = (TextView) findViewById(R.id.te3);
//创建一个匿名线程用于下载文件
new Thread()
{
public void run()
{
homeBean = JsonUtils.json2Bean("{\"name\":\n" +
"\"海量正版精品应用\",\n" +
"\"西单大悦城\",\n" +
"\"小说排行\",\"都市\",\"大主宰\",\"雪鹰领主\",\"龙王传说\",\"一念永恒\",\"武道巅峰\",\"校花的贴身高手\",\"太古神王\",\"帝霸\",\"择天记\",\"天域苍穹\",\"我真是大明星\",\"玄界之门\",\"超品相师\",\"全职法师\",\"特种兵在都市\",\"邪王追妻\",\"不朽凡人\",\"飞天\",\"万古神帝\",\"最强狂兵\",\"龙符\",\"儒道至圣\",\"圣墟\",\"永夜君王\",\"人道至尊\",\"逆天邪神\",\"逆鳞\",\"重生之都市修仙\",\"忍辱负重\",\"DNF\",\"掌门\",\"悬疑\",\"韦小宝\",\"护士\",\"宅斗\",\"小李飞刀\",\"阵法\",\"诸葛亮\",\"锦衣卫\",\"大神\",\"奇幻\",\"星际\",\"GL\",\"神墓\",\"吞天决\",\"七年之痒\",\"穿越\",\"重生\",\"豪门\",\"言情\",\"修真\",\"异能\",\"杀手\",\"神魔\",\"特种兵\",\"武逆\",\"悬疑探险\",\"总裁\",\"斗神天下\",\"武道修魂\",\"全系修真\",\"校园\",\"网游排行榜\",\"陈二狗的妖孽人生\",\"唐家三少\",\"辰东\",\"天蚕土豆\",\"风凌天下\",\"极品护花保镖\",\"校园全能高手\",\"英雄联盟\",\"神医天下\",\"极品\",\"最强战兵\",\"火爆兵王\",\"天才相士\",\"武灵天下\",\"武逆\",\"万道剑尊\",\"阴阳鬼术\",\"绝世药神\",\"修真聊天群\",\"魔王\",\"海盗\",\"通天剑主\",\"传奇再现\",\"造化之王\",\"神级英雄\",\"仙路至尊\",\"偷香高手\",\"斗罗大陆\",\"神经小坏蛋\",\"战歌之王\",\"怪物乐园\",\"黑武士的猫\",\"一世之尊\",\"将夜\",\"无尽丹田\",\"狂神\",\"长生界\",\"恶魔法则\",\"天珠变\",\"英雄信条\",\"主宰之王\",\"焚天之怒\",\"梦幻空间\",\"苍穹龙骑\",\"盗贼王座\",\"重生之我为书狂\",\"逍遥小镇长\",\"极品仙师\",\"轮回游戏空间\",\"魔兽要塞\",\"贼行天下\",\"从零开始\",\"召唤剑圣\",\"超凡者游戏\",\"超野蛮\",\"网游之天地\",\"独闯天涯\",\"法师神游\",\"暗夜游侠\",\"超级包裹\",\"魔性游戏\",\"高手寂寞\",\"绝对死亡游戏\",\"沧狼行\",\"不死不灭\",\"九鼎记\",\"龙蛇演义\",\"大唐医神\",\"剑雨楼\",\"江湖第一高手\",\"重求天道\"\n" +
"]}", HomeBean.class);
datas = null;
if (MainActivity.this.homeBean != null) {
datas = homeBean.getName(); // 获取数据列表
System.out.println(datas);
Message message = handler.obtainMessage();
message.what = 3;
handler.sendMessage(message);
result=datas.size()/3;
System.out.println("send==="+result);
end=datas.size()%3;
handler.sendEmptyMessage(0);
}
}
}.start();
}
}由于需要在关键词最后再次展示之前的,需要考虑到最后剩下单个词或两个的情况,需要再加上文本前一两个,这里通过取余的一些算法,完成操作.
代码中文本内容为json字符串,解析json使用的Gson.jar,使用方法添加依赖compile 'com.google.code.gson:gson:2.7'
其中的JsonUtils为自己写的使用gson的工具类,只为方便使用
JavaBean的创建可以使用GsonFormat插件,在AS中安装:File-->Settings-->Plugins
三个控件展示三个关键词,在资源文件获取文本,每隔5秒切换下一词,关键词展示到最后再重头开始
开发工具:Android studio
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.example.leaven.demo.MainActivity">
<TextView
android:id="@+id/te1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/te2"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/te3"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"/>
</LinearLayout>
代码:
public class MainActivity extends AppCompatActivity {
private TextView te1;
private TextView te2;
private TextView te3;
private int result;
private int end;
private int current;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
int i=msg.what;
if (end!=0&¤t==result){
if(end==1){
te1.setText(datas.get(i*3));
te2.setText(null);
te3.setText(null);
}
if(end==2){
te1.setText(datas.get(i*3));
te2.setText(datas.get(i*3+1));
te3.setText(null);
}
}
te1.setText(datas.get(i*3));
te2.setText(datas.get(i*3+1));
te3.setText(datas.get(i*3+2));
if(current!=result){
current++;
handler.sendEmptyMessageDelayed(current,5000);
}else {
current=0;
handler.sendEmptyMessageDelayed(current,5000);
}
}
};
private List<String> datas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
}
private void initview() {
te1 = (TextView) findViewById(R.id.te1);
te2 = (TextView) findViewById(R.id.te2);
te3 = (TextView) findViewById(R.id.te3);
//创建一个匿名线程用于下载文件
new Thread()
{
public void run()
{
homeBean = JsonUtils.json2Bean("{\"name\":\n" +
"\"海量正版精品应用\",\n" +
"\"西单大悦城\",\n" +
"\"小说排行\",\"都市\",\"大主宰\",\"雪鹰领主\",\"龙王传说\",\"一念永恒\",\"武道巅峰\",\"校花的贴身高手\",\"太古神王\",\"帝霸\",\"择天记\",\"天域苍穹\",\"我真是大明星\",\"玄界之门\",\"超品相师\",\"全职法师\",\"特种兵在都市\",\"邪王追妻\",\"不朽凡人\",\"飞天\",\"万古神帝\",\"最强狂兵\",\"龙符\",\"儒道至圣\",\"圣墟\",\"永夜君王\",\"人道至尊\",\"逆天邪神\",\"逆鳞\",\"重生之都市修仙\",\"忍辱负重\",\"DNF\",\"掌门\",\"悬疑\",\"韦小宝\",\"护士\",\"宅斗\",\"小李飞刀\",\"阵法\",\"诸葛亮\",\"锦衣卫\",\"大神\",\"奇幻\",\"星际\",\"GL\",\"神墓\",\"吞天决\",\"七年之痒\",\"穿越\",\"重生\",\"豪门\",\"言情\",\"修真\",\"异能\",\"杀手\",\"神魔\",\"特种兵\",\"武逆\",\"悬疑探险\",\"总裁\",\"斗神天下\",\"武道修魂\",\"全系修真\",\"校园\",\"网游排行榜\",\"陈二狗的妖孽人生\",\"唐家三少\",\"辰东\",\"天蚕土豆\",\"风凌天下\",\"极品护花保镖\",\"校园全能高手\",\"英雄联盟\",\"神医天下\",\"极品\",\"最强战兵\",\"火爆兵王\",\"天才相士\",\"武灵天下\",\"武逆\",\"万道剑尊\",\"阴阳鬼术\",\"绝世药神\",\"修真聊天群\",\"魔王\",\"海盗\",\"通天剑主\",\"传奇再现\",\"造化之王\",\"神级英雄\",\"仙路至尊\",\"偷香高手\",\"斗罗大陆\",\"神经小坏蛋\",\"战歌之王\",\"怪物乐园\",\"黑武士的猫\",\"一世之尊\",\"将夜\",\"无尽丹田\",\"狂神\",\"长生界\",\"恶魔法则\",\"天珠变\",\"英雄信条\",\"主宰之王\",\"焚天之怒\",\"梦幻空间\",\"苍穹龙骑\",\"盗贼王座\",\"重生之我为书狂\",\"逍遥小镇长\",\"极品仙师\",\"轮回游戏空间\",\"魔兽要塞\",\"贼行天下\",\"从零开始\",\"召唤剑圣\",\"超凡者游戏\",\"超野蛮\",\"网游之天地\",\"独闯天涯\",\"法师神游\",\"暗夜游侠\",\"超级包裹\",\"魔性游戏\",\"高手寂寞\",\"绝对死亡游戏\",\"沧狼行\",\"不死不灭\",\"九鼎记\",\"龙蛇演义\",\"大唐医神\",\"剑雨楼\",\"江湖第一高手\",\"重求天道\"\n" +
"]}", HomeBean.class);
datas = null;
if (MainActivity.this.homeBean != null) {
datas = homeBean.getName(); // 获取数据列表
System.out.println(datas);
Message message = handler.obtainMessage();
message.what = 3;
handler.sendMessage(message);
result=datas.size()/3;
System.out.println("send==="+result);
end=datas.size()%3;
handler.sendEmptyMessage(0);
}
}
}.start();
}
}由于需要在关键词最后再次展示之前的,需要考虑到最后剩下单个词或两个的情况,需要再加上文本前一两个,这里通过取余的一些算法,完成操作.
代码中文本内容为json字符串,解析json使用的Gson.jar,使用方法添加依赖compile 'com.google.code.gson:gson:2.7'
其中的JsonUtils为自己写的使用gson的工具类,只为方便使用
package com.itheima.googleplay.util; import java.lang.reflect.Type; import android.util.Log; import com.google.gson.Gson; /** json数据解析工具 */ public class JsonUtil { /** 用于解析json的类 */ private static Gson GSON = new Gson(); /** * 把json字符串转换为JavaBean * @param json json字符串 * @param beanClass JavaBean的Class * @return */ public static <T> T json2Bean(String json, Class<T> beanClass) { T bean = null; try { bean = GSON.fromJson(json, beanClass); } catch (Exception e) { Log.i("JsonUtil", "解析json数据时出现异常\njson = " + json, e); } return bean; } /** * 把json字符串转换为JavaBean。如果json的根节点就是一个集合,则使用此方法<p> * type参数的获取方式为:Type type = new TypeToken<集合泛型>(){}.getType(); * @param json json字符串 * @return type 指定要解析成的数据类型 */ public static <T> T json2Collection(String json, Type type) { T bean = null; try { bean = GSON.fromJson(json, type); } catch (Exception e) { Log.i("JsonUtil", "解析json数据时出现异常\njson = " + json, e); } return bean; } }
JavaBean的创建可以使用GsonFormat插件,在AS中安装:File-->Settings-->Plugins
相关文章推荐
- 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析
- VC/MFC 使用jsoncpp解析json格式内容
- Android中Json数据解析,Thread+Handler ,SimpleAdapter使用小案例
- android中使用httpclient方法获得网页内容并对json对象解析
- 使用Unity自带的解析工具完成Json数据的解析
- java解析json文本,去除//后和/**/中的内容
- Json数据格式介绍、使用Android自带类库完成Json生成与解析
- c#.net 文本编辑控件——使用 Visual C# .NET 打印 RichTextBox 控件的内容
- 使用HttpHandler解析并展示PDF文档内容(转载)
- Json数据格式介绍、使用Android自带类库完成Json生成与解析
- Gson的使用——Gson解析json数组并展示在ListView控件上
- 安卓:handler解析json新闻,显示图片,标题,内容(未判断网络连接状态)
- 使用jsonpath解析json内容
- 使用jsonpath解析json内容
- Gson的使用——Gson解析json数组并展示在ListView控件上
- Gson的使用——Gson解析json数组并展示在ListView控件上
- 使用HttpHandler解析并展示PDF文档内容
- Android中Json数据解析,Thread+Handler ,SimpleAdapter使用小案例
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容