之前遇到一个问题,给我一个接口,接口请求到的数据是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 仅此纪念没带脑子的自己.....