![[android] 天气app布局练习(四),第1张 [android] 天气app布局练习(四),第1张](/aiimages/%5Bandroid%5D+%E5%A4%A9%E6%B0%94app%E5%B8%83%E5%B1%80%E7%BB%83%E4%B9%A0%EF%BC%88%E5%9B%9B%EF%BC%89.png)
主要练习一下获取网络数据和解析xml
MainActivity.java
package com.example.weatherreport;import java.io.UnsupportedEnCodingException; java.net.URLEncoder; java.util.ArrayList; java.util.HashMap; java.util.List; java.util.Map; androID.app.Activity; androID.os.Bundle; androID.Widget.GrIDVIEw; androID.Widget.SimpleAdapter; androID.Widget.TextVIEw; com.example.weatherreport.contants.APIContants; com.example.weatherreport.domain.Weather; com.example.weatherreport.net.httpListener; com.example.weatherreport.net.httpUtil;public class MainActivity extends Activity { private GrIDVIEw gv_airs; TextVIEw tv_city; TextVIEw tv_number; TextVIEw tv_rain; 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 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 onSuccess(String result) { Weather weather=(Weather) httpUtil.xml2object(result); setVIEwWeather(weather); } @OverrIDe onError(String result) { System.out.println(result); } }); } 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 makeGrIDVIEw() { List<Map<String,String>> data = new ArrayList<>(); Map<String,String> item = ; item = new HashMap<>(); item.put("Title","83"); item.put("desc","湿度(%)"); data.add(item); item = ); data.add(item); SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.main_grID_item,new String[] { "Title","desc" },1)">new int[] { R.ID.tv_Title,R.ID.tv_desc }); gv_airs.setAdapter(adapter); }}
httpUtil.java
com.example.weatherreport.net; java.io.ByteArrayOutputStream; java.io.inputStream; java.io.StringReader; java.net.httpURLConnection; java.net.URL; org.xmlpull.v1.XmlPullParser; androID.os.Handler; androID.os.Message; androID.util.Xml; com.example.weatherreport.domain.Weather;class httpUtil { static final int SUCCESS = 1; int ERROR = 2; * 获取get数据 * * @param APIUrl voID get(final String APIUrl,1)">final httpListener Listener) { final Handler handler = httpHandler(Listener); new Thread( Runnable() { @OverrIDe run() { Message msg = Message(); { URL url = 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)); } } (Exception e) { e.printstacktrace(); msg.what = ERROR; msg.obj = "网络异常"; handler.sendMessage(msg); } } }).start(); } * 读取输入流 * * is * @return static String readinputStream(inputStream is) { ByteArrayOutputStream baos = ByteArrayOutputStream(); int len = 0byte[] buffer = byte[1024]; { while ((len = is.read(buffer)) != -1) { baos.write(buffer,0byte[] res = baos.toByteArray(); return String(res); } (Exception e) { e.printstacktrace(); } ; } * 解析xml * * Object xml2object(String xmlString) { Weather weather = Weather(); { XmlPullParser pullParser = Xml.newPullParser(); pullParser.setinput( 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")) { } { 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; XmlPullParser.END_TAG: default: ; } event = pullParser.next(); } } return weather; }} * * 位于主线程的Handler * @author taoshihan * */class httpHandler Handler { httpListener Listener; public httpHandler(httpListener Listener) { this.Listener=Listener; } @OverrIDe handleMessage(Message msg) { int flag=msg.what; String res=(String)msg.obj; if (flag==httpUtil.SUCCESS) { Listener.onSuccess(res); }{ Listener.onError(res); } }}
httpListener.java
interface httpListener { onSuccess(String result); onError(String result);}
总结
以上是内存溢出为你收集整理的[android] 天气app布局练习(四)全部内容,希望文章能够帮你解决[android] 天气app布局练习(四)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)