android 异步线程刷新UI 以及 JSON解析 以及 url get请求
import android.os.Handler;
import android.os.Message;
1.
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
progressBar.setVisibility(View.GONE);
myAdapter.notifyDataSetChanged();
break;
default:
break;
}
}
};
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
2.json解析:解析数据:
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_body": {
"ret_code": 0,
"list": [
{
"prov": "河北",
"p90": "5.77",
"p0": "5.83",
"p95": "6.69",
"p97": "6.58",
"p89": "5.48",
"p92": "6.34",
"ct": "2017-05-31 07:02:32.408",
"p93": "6.22"
},
{
"prov": "山西",
"p90": "6.28",
"p0": "6.08",
"p95": "6.81",
"p97": "6.89",
"p89": "5.89",
"p92": "6.31",
"ct": "2017-05-31 07:02:32.403",
"p93": "6.39"
},
{
"prov": "内蒙古",
"p90": "6.46",
"p0": "6.69",
"p95": "6.77",
"p97": "7.25",
"p89": "",
"p92": "6.31",
"ct": "2017-05-31 07:02:32.396",
"p93": "6.75"
},
{
"prov": "辽宁",
"p90": "5.67",
"p0": "5.75",
"p95": "6.74",
"p97": "6.63",
"p89": "5.86",
"p92": "6.32",
"ct": "2017-05-31 07:02:32.394",
"p93": "6.21"
},
{
"prov": "吉林",
"p90": "5.62",
"p0": "5.76",
"p95": "6.81",
"p97": "6.69",
"p89": "6.1",
"p92": "6.31",
"ct": "2017-05-31 07:02:32.389",
"p93": "6.2"
},
{
"prov": "黑龙江",
"p90": "5.59",
"p0": "5.03",
"p95": "6.51",
"p97": "6.08",
"p89": "",
"p92": "6.14",
"ct": "2017-05-31 07:02:32.412",
"p93": "5.66"
},
{
"prov": "上海",
"p90": "5.79(沪89号)",
"p0": "5.81",
"p95": "6.72",
"p97": "6.6(沪95号)",
"p89": "6.02",
"p92": "6.31",
"ct": "2017-05-31 07:02:32.389",
"p93": "6.2(沪92号)"
},
]
}
}
解析语句:
//解析多个数据的Json
private void parseJsonMulti(String strResult) { try {
JSONArray jsonObjs = new JSONObject(strResult).getJSONObject("showapi_res_body").getJSONArray("list");
String s = "";
for(int i = 0; i < jsonObjs.length() ; i++){ JSONObject jsonObj = (JSONObject)jsonObjs.get(i);
Petrol petrol = new Petrol();
petrol.setProv(jsonObj.getString("prov"));
petrol.setP0(jsonObj.getString("p0"));
petrol.setP89(jsonObj.getString("p89"));
petrol.setP90(jsonObj.getString("p90")); petrol.setP92(jsonObj.getString("p92"));
petrol.setP93(jsonObj.getString("p93"));
petrol.setP95(jsonObj.getString("p95"));
petrol.setP97(jsonObj.getString("p97")); } } catch (JSONException e) {
System.out.println("Jsons parse error !");
e.printStackTrace();
}
}
json解析的时候可以使用opting,和getstring的区别就是
optString会在得不到你想要的值时候返回空字符串”“,而getString会抛出异常。
可以解决服务器字段缺少或者没有该字段而导致的异常以至于程序崩溃。
url get请求
URLConnection connection = null;
BufferedReader br = null;
try { StringBuffer sb = new StringBuffer();
URL url = new URL("http://route.showapi.com/138-46?showapi_appid=38170&showapi_sign=4860f68a39034b48a9214e5f38eded75&prov=");
connection = url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.connect(); InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
br = new BufferedReader(isr);
String strRead = null;
while ((strRead = br.readLine()) != null) {
sb.append(strRead); } parseJsonMulti(sb.toString());
catch (Exception e) {
e.printStackTrace();
System.out.println("发送get请求出现异常!" + e);
}finally {
}
android 异步线程刷新UI 以及 JSON解析 以及 url get请求的更多相关文章
- android 利用线程刷新UI方法
新建线程new Thread(new Runnable() 线程方法:public void run() private void setAddWidgetEnabled(boolean enable ...
- Android -- ViewRoot,关于子线程刷新UI
Android在4.0之后执行线程更新UI操作会报异常:CalledFromWrongThreadException:Only the original thread that created a v ...
- 线程池内的异步线程创建UI控件,造成UI线程卡死无响应的问题分析
winform应用在使用一段时间后,切换到其他系统或者打开word.excel文档,再切换回winform应用时,系统有时出现不响应的现象.有时在锁屏后恢复桌面及应用时也发生此问题. 经微软支持确认, ...
- Android子线程更新UI成功
android子线程更新UI成功 今天在写demo的时候,在子线程中更新UI,发现更新成功,记录一下. protected void onCreate(Bundle savedInstanceStat ...
- Android中使用异步线程更新UI视图的几种方法
在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...
- Android子线程更新UI的方法总结
版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...
- 安卓 异步线程更新Ui
异步跟新UI: 1.handler+Thread(runnable):如果handler和Thread都写在了一个Java文件中,就不说了,如果runnable定义在了一个单独的类文件中,可以通过在构 ...
- Android子线程更新UI主线程方法之Handler
背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. ...
- android子线程更新UI
参考:https://www.cnblogs.com/joy99/p/6121280.html 子线程是不能直接更新UI的.Android实现View更新有两组方法,分别是invalidate和pos ...
随机推荐
- window用Xmanager4.0的Xstart连接linux远程桌面
安装包: xorg-x11-xauth xterm.x86_64 0:253-1.el6 Execute command path:/usr/bin/xterm Xstart连接Linux远程桌面有一 ...
- 网站性能测试PV到TPS的转换以及TPS的波动和淘宝性能测试要点
<淘宝性能测试白皮书V0.3> 性能测试的难点不在于测,在于测出的数据和实际的对照关系,以及测试出来的数据对性能的评估(到底是好,还是不好). 淘宝性能测试白皮书,解决了我的4个问题:1. ...
- VS2010配置HTML5智能提示
步骤: 1.首先去这里下载安装文件: http://visualstudiogallery.msdn.microsoft.com/d771cbc8-d60a-40b0-a1d8-f19fc393127 ...
- VS2008远程调试操作方法
前言 最近遇到一个问题:组态王在本地调试机上运行正常,但在远程测试机上运行却出现了崩溃.本机上装有Visual Studio 2008,测试机上则没有.于是,在网上找资料,想利用远程调试方法,在本机上 ...
- day04<Java语言基础+>
Java语言基础(循环结构概述和for语句的格式及其使用) Java语言基础(循环结构for语句的练习之获取数据) Java语言基础(循环结构for语句的练习之求和思想) Java语言基础(循环结构f ...
- 关于KEIL仿真的虚拟串口讲解
这个是最后的效果图,右下方是串口打印的设置 第一步:在程序上写入关于串口一的配置,以及初始化和串口输出的内容 第二步:需要的时候在进行配置,在OPTIONS OF TARGET一栏的c/c++中(其原 ...
- Win7下使用Putty代替超级终端通过COM串口连接开发板方法
1.如果电脑(笔记本)没有串口接口,则需要使用一个 USB-Serial 转换线,这里使用 prolific usb-serial USB--串口转换线,首先需要在win7上安装对应的 USB--串口 ...
- C++说明符和限定符
有些被称为存储说明符(storage class specifier)或cv-限定符(cv-qualifier)的C++关键字提供了一些有关存储的信息.下面是存储所说明符:* auto (在C++11 ...
- poj_3579 二分法
题目大意 给定N个数,这些数字两两求差构成C(N,2)(即N*(N-1)/2)个数值,求这C(N,2)个数的中位数.N <= 100000. 题目分析 根据数据规模N最大为100000,可知不能 ...
- 如何在office2010中的EXCEL表格使用求和公式
EXCEL做表格非常方便,有时我们需要对表格中的很多数字进行求和计算,如果用计算器算会非常麻烦,别担心,用求和公式计算,非常简单的 工具/原料 电脑一台 offic2010软件一套 方法/步骤 ...