避免主线程访问网络操作UI以及解析XMLDemo
来源:互联网 发布:淘宝卖家免费打折软件 编辑:程序博客网 时间:2024/05/29 14:31
之前遇到一个问题,给我一个接口,接口请求到的数据是xml返回的,那么我需要解析这个xml;其次,我直接写的网络请求忘记主线程不能直接访问网络等耗时操作;最后又犯了一个错误在主线程里直接操作了UI。真是犯错毫不手软啊,怀疑自己不带脑子了.....
/** * date: 2017/6/14 11:16 * autour: HelenChen * description: 网络访问 天气数据 */ private void weatherDataServer() { new Thread(new Runnable() { @Override public void run() { try {// String url = "http://php.weather.sina.com.cn/xml.php?city=%c0%d6%c6%bd&password=DJOYnieT8234jlsK&day=0"; String strCity = URLEncoder.encode("乐平", "GB2312"); String url = UrlManager.WeatherInfo + "&day=0" + "&city=" + strCity; String aa = weatherData(url); Log.i("天气url ", url); Document doc = DocumentHelper.parseText(aa); Element foo = doc.getRootElement(); Iterator it = foo.elementIterator(); final HashMap<String, String> weatherMap = new HashMap<String, String>(); while (it.hasNext()) { Element weather = (Element) it.next(); List weatherAttrs = weather.attributes(); Iterator itt = weather.elementIterator(); while (itt.hasNext()) { Element weatherChild = (Element) itt.next(); Log.i("解析天气1 ", weatherChild.getName() + "\t\t\t" + weatherChild.getStringValue()); weatherMap.put(weatherChild.getName(), weatherChild.getStringValue()); } Log.i("解析天气2 ", weatherMap.get("pollution_s")); //操作UI Message message = new Message(); message.what = SHOW_RESPONSE; message.obj = weatherMap; handler.sendMessage(message); } } catch (Exception e) { e.printStackTrace(); } } }).start(); }
/** * date: 2017/6/14 11:16 * autour: HelenChen * description: 网络访问 天气数据 */private String weatherData(String url) { OutputStreamWriter out = null; BufferedReader in = null; StringBuilder result = new StringBuilder(); try { URL realUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection(); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // POST方法 conn.setRequestMethod("GET"); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.connect(); // 获取URLConnection对象对应的输出流 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); // 发送请求参数 // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); } } catch (Exception e) { e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result.toString();}
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SHOW_RESPONSE: HashMap<String, String> weatherMap = (HashMap<String, String>) msg.obj; fillView(weatherMap); break; default: break; } }};
OK 仅此纪念没带脑子的自己.....
阅读全文
0 0
- 避免主线程访问网络操作UI以及解析XMLDemo
- why 主线程操作UI
- C#多线程访问主线程UI元素
- 关于android4.0中访问网络不能在主线程中进行以及Handler的使用
- 关于android4.0中访问网络不能在主线程中进行以及Handler的使用
- Android 4主线程访问网络
- 解决Android主线程不能访问网络
- Android 4主线程访问网络
- android 4.0主线程访问网络问题
- android主线程访问网络出错
- Android 4主线程访问网络
- Android 4主线程访问网络
- android 4.0 主线程访问网络异常
- Android 4主线程访问网络 .
- android主线程访问网络的方法
- Android主线程里不允许网络操作
- 【iOS开发-95】JSON反序列化、XML数据解析以及主线程中的UI更新等小细节
- WPF多线程访问主线程中的ui控件
- Spring--->IOC(DI)使用方式
- 微信支付网络监控工具部署指引
- java中的多态
- 源码编译rrdtool提示找不到xxx.pc类问题处理
- 模块和包.深入Celery之应用配置/独立模块配置实践
- 避免主线程访问网络操作UI以及解析XMLDemo
- 目录
- Eclipse在高分辨率下图标变小的解决方法
- python自然语言处理之加载本地语料库
- 协议tcp/http常见问题&知识点
- 直连sde出错解决方案——通过创建sde文件连接
- java发送http的get、post请求工具类
- cogs739. [网络流24题] 运输问题
- 图书管理系统设计报告