zoukankan      html  css  js  c++  java
  • [android] 天气app布局练习(四)

    主要练习一下获取网络数据和解析xml

    MainActivity.java

    package com.example.weatherreport;
    
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.GridView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    
    import com.example.weatherreport.contants.ApiContants;
    import com.example.weatherreport.domain.Weather;
    import com.example.weatherreport.net.HttpListener;
    import com.example.weatherreport.net.HttpUtil;
    
    public class MainActivity extends Activity {
        private GridView gv_airs;
        private TextView tv_city;
        private TextView tv_number;
        private TextView tv_rain;
        private TextView tv_cloth;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            gv_airs = (GridView) findViewById(R.id.gv_airs);
            tv_city=(TextView) findViewById(R.id.tv_city);
            tv_number=(TextView) findViewById(R.id.tv_number);
            tv_rain=(TextView) findViewById(R.id.tv_rain);
            tv_cloth=(TextView) findViewById(R.id.tv_cloth);
            setViewData();
            makeGridView();
        }
    
        /**
         * 设置界面数据
         */
        private void setViewData() {
            String city = null;
            try {
                city = URLEncoder.encode("北京", "gb2312");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            HttpUtil.get(ApiContants.WEATHER_URL+"?city="+city+"&password=DJOYnieT8234jlsK&day=0", new HttpListener() {
                @Override
                public void onSuccess(String result) {
                    Weather weather=(Weather) HttpUtil.xml2object(result);
                    setViewWeather(weather);
                    
                }
    
                @Override
                public void onError(String result) {
                    System.out.println(result);
                }
            });
    
        }
    
        protected void setViewWeather(Weather weather) {
            tv_city.setText(weather.getCity());
            tv_number.setText(weather.getHot());
            tv_rain.setText(weather.getRain());
            tv_cloth.setText(weather.getCloth());
            System.out.println(weather.toString());
        }
    
        /**
         * 组装GridView
         */
        private void makeGridView() {
            List<Map<String, String>> data = new ArrayList<>();
            Map<String, String> item = null;
            item = new HashMap<>();
            item.put("title", "83");
            item.put("desc", "湿度(%)");
            data.add(item);
    
            item = new HashMap<>();
            item.put("title", "11.3");
            item.put("desc", "可见度(km)");
            data.add(item);
    
            item = new HashMap<>();
            item.put("title", "2级");
            item.put("desc", "东南风");
            data.add(item);
    
            item = new HashMap<>();
            item.put("title", "最弱");
            item.put("desc", "紫外线");
            data.add(item);
    
            item = new HashMap<>();
            item.put("title", "1005.5");
            item.put("desc", "气压(mb)");
            data.add(item);
    
            item = new HashMap<>();
            item.put("title", "22.4");
            item.put("desc", "体感");
            data.add(item);
    
            SimpleAdapter adapter = new SimpleAdapter(this, data,
                    R.layout.main_grid_item, new String[] { "title", "desc" },
                    new int[] { R.id.tv_title, R.id.tv_desc });
            gv_airs.setAdapter(adapter);
        }
    }

    HttpUtil.java

    package com.example.weatherreport.net;
    
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    import java.io.StringReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import org.xmlpull.v1.XmlPullParser;
    
    import android.os.Handler;
    import android.os.Message;
    import android.util.Xml;
    
    import com.example.weatherreport.domain.Weather;
    
    public class HttpUtil {
        public static final int SUCCESS = 1;
        public static final int ERROR = 2;
    
        /**
         * 获取get数据
         * 
         * @param apiUrl
         */
        public static void get(final String apiUrl, final HttpListener listener) {
            final Handler handler = new HttpHandler(listener);
            new Thread(new Runnable() {
    
                @Override
                public void run() {
                    Message msg = new Message();
                    try {
                        URL url = new URL(apiUrl);
                        HttpURLConnection conn = (HttpURLConnection) url
                                .openConnection();
                        conn.setRequestMethod("GET");
                        conn.setConnectTimeout(5000);
    
                        int code = conn.getResponseCode();
                        if (code == 200) {
                            InputStream is = conn.getInputStream();
                            String result = readInputStream(is);
                            msg.what = SUCCESS;
                            msg.obj = result;
                            handler.sendMessage(msg);
    
                        } else {
                            listener.onError(String.valueOf(code));
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        msg.what = ERROR;
                        msg.obj = "网络异常";
                        handler.sendMessage(msg);
                    }
                }
            }).start();
    
        }
    
        /**
         * 读取输入流
         * 
         * @param is
         * @return
         */
        public static String readInputStream(InputStream is) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int len = 0;
            byte[] buffer = new byte[1024];
            try {
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                is.close();
                byte[] res = baos.toByteArray();
                return new String(res);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 解析xml
         * 
         * @return
         */
        public static Object xml2object(String xmlString) {
            Weather weather = new Weather();
            try {
                XmlPullParser pullParser = Xml.newPullParser();
                pullParser.setInput(new StringReader(xmlString));
                int event = pullParser.getEventType();
                while (event != XmlPullParser.END_DOCUMENT) {
                    switch (event) {
                    case XmlPullParser.START_TAG:
                        String tagName = pullParser.getName();
                        if (tagName.equals("Weather") || tagName.equals("Profiles")) {
                        } else {
                            String tagValue = pullParser.nextText();
                            System.out.println(tagName + ":" + tagValue);
                            if (tagName.equals("status1")) {
                                weather.setRain(tagValue);
                            }
                            if (tagName.equals("tgd1")) {
                                weather.setHot(tagValue);
                            }
                            if (tagName.equals("chy_l")) {
                                weather.setCloth(tagValue);
                            }
                            if (tagName.equals("city")) {
                                weather.setCity(tagValue);
                            }
                        }
                        break;
                    case XmlPullParser.END_TAG:
                    default:
                        break;
                    }
                    event = pullParser.next();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return weather;
        }
    
    }
    /**
     * 
     * 位于主线程的Handler
     * @author taoshihan
     *
     */
    class HttpHandler extends Handler {
        private HttpListener listener;
        public HttpHandler(HttpListener listener) {
            this.listener=listener;
        }
    
        @Override
        public void handleMessage(Message msg) {
            int flag=msg.what;
            String res=(String)msg.obj;
            if (flag==HttpUtil.SUCCESS) {
                listener.onSuccess(res);
            }else{
                listener.onError(res);
            }
        }
    }

    HttpListener.java

    package com.example.weatherreport.net;
    
    public interface HttpListener {
        public void onSuccess(String result);
        public void onError(String result);
    }
  • 相关阅读:
    行列式运算法则
    神经元的数学模型
    Neural Network and Artificial Neural Network
    常见的23种设计模式
    Java 基本数据类型 及 == 与 equals 方法的区别
    MySQL经典编程问题
    MyEclipse配置tomcat报错
    MySQL 日期类型函数及使用
    MySQL dump文件导入
    MySQL 的两个特殊属性 unsigned与 zerofill
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5678864.html
Copyright © 2011-2022 走看看