[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); 
}

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/app/5377.html

(0)
上一篇 2021年7月16日 23:46
下一篇 2021年7月16日 23:46

相关推荐

发表回复

登录后才能评论