android解析xml资料 Android DOM解析XML之全球实时地震信息列表
android解析xml文件 Android DOM解析XML之全球实时地震信息列表public?class?HttpGet?extends?Activity?{
android解析xml文件 Android DOM解析XML之全球实时地震信息列表
public?class?HttpGet?extends?Activity?{ ???? private?ListView?list; ???? EarthQuakeInfo?selectedQuake; ???? ArrayAdapter?adapter; ???? ArrayList?infoList=new?ArrayList(); ???? @Override???? protected?void?onCreate(Bundle?savedInstanceState)?{ ???? super.onCreate(savedInstanceState); ???? this.setContentView(R.layout.main); ???? //设置listView的内容为infoList ???? list=(ListView)this.findViewById(R.id.list); ???? adapter=new?ArrayAdapter(this,android.R.layout.simple_list_item_1,infoList); ???? //设置ListView的适配器为adapter ???? list.setAdapter(adapter); ???? getInfo();//获得infoList的具体内容。 ???? } ???? private?void?getInfo(){ ???? URL?url; ???? try{ ???? String?feed=getString(R.string.feed); ???? url=new?URL(feed); ???? URLConnection?connection=url.openConnection(); ???? HttpURLConnection?httpConnection=(HttpURLConnection)connection; ???? int?responseCode=httpConnection.getResponseCode(); ???? if(responseCode==HttpURLConnection.HTTP_OK){ ???? InputStream?in=httpConnection.getInputStream(); ???? DocumentBuilderFactory?dbfactory=DocumentBuilderFactory.newInstance(); ???? DocumentBuilder?db=dbfactory.newDocumentBuilder(); ???? //解析地震feed ???? Document?dom=db.parse(in); ???? Element?docEle=dom.getDocumentElement(); ???? //清空旧的地震信息 ???? infoList.clear(); ???? //获得地震信息列表 ???? NodeList?nl=docEle.getElementsByTagName("entry"); ???? if(nl!=null&&nl.getLength()>0){ ???? for(int?i=0;i<nl.getLength();i++){ ???? Element?entry=(Element)nl.item(i); ???? Element?title=(Element)entry.getElementsByTagName("title").item(0); ???? Element?geo=(Element)entry.getElementsByTagName("georss:point").item(0); ???? Element?when=(Element)entry.getElementsByTagName("updated").item(0); ????? ???? String?details=title.getFirstChild().getNodeValue(); ???? String?point=geo.getFirstChild().getNodeValue(); ???? String?date=when.getFirstChild().getNodeValue(); ???? SimpleDateFormat?sdf=new?SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'"); ???? Date?qdate=new?GregorianCalendar(0,0,0).getTime(); ???? try{ ???? qdate=sdf.parse(date); ???? }catch?(Exception?e)?{ ???? e.printStackTrace();//?TODO:?handle?exception ???? } ???? String[]?location=point.split("?"); ???? Location?loc=new?Location("dummyGPS"); ???? loc.setLatitude(Double.parseDouble(location[0])); ???? loc.setLongitude(Double.parseDouble(location[1])); ???? String?magnitudeString=details.split("?")[1]; ???? int?end=magnitudeString.length()-1; ???? double?magnitude=Double.parseDouble(magnitudeString.substring(0,end)); ???? details=details.split(",")[1].trim(); ???? EarthQuakeInfo?info=new?EarthQuakeInfo(qdate,details,loc,magnitude); ???? //处理地震信息 ???? newEntry(info); ???? } ???? } ???? } ???? }catch?(Exception?e)?{ ???? //?TODO:?handle?exception ???? } ???? } ???? private?void?newEntry(EarthQuakeInfo?info){ ???? infoList.add(info); ???? adapter.notifyDataSetChanged(); ???? } ???? public?class?EarthQuakeInfo{ ???? public?Date?date; ???? public?String?details; ???? public?Location?location; ???? public?double?magnitude; ???? public?EarthQuakeInfo(Date?d,String?de,Location?loc,double?mag){ ???? this.date=d; ???? this.details=de; ???? this.location=loc; ???? this.magnitude=mag; ???? } ???? @Override???? public?String?toString(){ ???? SimpleDateFormat?sdf=new?SimpleDateFormat("yyyy-MM-dd'?'hh:mm:ss"); ???? return?sdf.format(date)+"\n里氏"+magnitude+"级"+details+"地点"+location; ???? } ???? } ???? }??