避免主线程访问网络操作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 仅此纪念没带脑子的自己.....

原创粉丝点击