android解析xml文件 Android DOM解析XML之环球实时地震信息列表

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;

  }

  }

  }