【移动应用开发技术】Android - Earthquake(地震显示器) 项目 详解_第1页
【移动应用开发技术】Android - Earthquake(地震显示器) 项目 详解_第2页
【移动应用开发技术】Android - Earthquake(地震显示器) 项目 详解_第3页
【移动应用开发技术】Android - Earthquake(地震显示器) 项目 详解_第4页
【移动应用开发技术】Android - Earthquake(地震显示器) 项目 详解_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】Android-Earthquake(地震显示器)项目详解

Earthquake(地震显示器)项目详解本文地址:

/caroline_wendy/article/details/21976997环境:AndroidStudio0.5.2,Gradle1.11,kindlefire时间:2014-3-24Earthquake项目,主要是读取USGS(UnitedStatesGeologicalSurvey,美国地址勘探局)提供的feeds(订阅源),进行显示数据;需要读取互联网的数据,进行格式解析(parse),数据类型是atom类型,类似XML.订阅源地址:

/earthquakes/feed/v1.0/summary/2.5_day.atom格式:<feedxmlns="/2005/Atom"xmlns:georss="/georss"><title>USGSMagnitude2.5+Earthquakes,PastDay</title><updated>2014-03-24T07:56:39Z</updated><author><name>U.S.GeologicalSurvey</name><uri>/</uri></author><id>/earthquakes/feed/v1.0/summary/2.5_day.atom</id><linkrel="self"href="/earthquakes/feed/v1.0/summary/2.5_day.atom"/><icon>/favicon.ico</icon><entry><id>urn:earthquake-usgs-gov:ci:15479569</id><title>M2.9-9kmWofAlbertoOviedoMota,Mexico</title><updated>2014-03-24T07:48:34.609Z</updated><linkrel="alternate"type="text/html"href="/earthquakes/eventpage/ci15479569"/><summarytype="html"><![CDATA[<pclass="quicksummary"><ahref="/earthquakes/eventpage/ci15479569#dyfi"class="mmi-I"title="DidYouFeelIt?maximumreportedintensity(0reports)">DYFI?-<strongclass="roman">I</strong></a></p><dl><dt>Time</dt><dd>2014-03-2407:38:10UTC</dd><dd>2014-03-2323:38:10-08:00atepicenter</dd><dt>Location</dt><dd>32.222°N115.274°W</dd><dt>Depth</dt><dd>14.10km(8.76mi)</dd></dl>]]></summary><georss:point>32.2215-115.274</georss:point><georss:elev>-14100</georss:elev><categorylabel="Age"term="PastHour"/><categorylabel="Magnitude"term="Magnitude2"/></entry>新建项目:Earthquake位置:java->package->Quakepackagemzx.spike.earthquake.app;importandroid.location.Location;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassQuake{privateDatedate;privateStringdetails;privateLocationlocation;privatedoublemagnitude;privateStringlink;publicDategetDate(){returndate;}publicStringgetDetails(){returndetails;}publicLocationgetLocation(){returnlocation;}publicdoublegetMagnitude(){returnmagnitude;}publicStringgetLink(){returnlink;}publicQuake(Date_d,String_det,Location_loc,double_mag,String_link){date=_d;details=_det;location=_loc;magnitude=_mag;link=_link;}@OverridepublicStringtoString(){SimpleDateFormatsdf=newSimpleDateFormat("HH.mm");StringdateString=sdf.format(date);returndateString+":"+magnitude+""+details;}}1.显示的类型:date,日期;details,详细信息,地点;location,位置;magnitude,震级;link,链接;2.get()方法,返回信息;构造函数,赋初值;toString(),默认输出信息;位置:res->layout->activity_main.xml<RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context="mzx.spike.earthquake.app.MainActivity"><fragmentandroid:name="mzx.spike.earthquake.app.EarthquakeListFragment"android:id="@+id/EarthquakeListFragment"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout>位置:java->package->EarthquakeListFragment.javapackagemzx.spike.earthquake.app;importandroid.app.ListFragment;importandroid.location.Location;importandroid.os.Bundle;importandroid.os.Handler;importandroid.util.Log;importandroid.widget.ArrayAdapter;importorg.w3c.dom.Document;importorg.w3c.dom.Element;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;importjava.io.IOException;importjava.io.InputStream;import.HttpURLConnection;import.MalformedURLException;import.URL;import.URLConnection;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.GregorianCalendar;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;publicclassEarthquakeListFragmentextendsListFragment{ArrayAdapter<Quake>aa;ArrayList<Quake>earthquakes=newArrayList<Quake>();@OverridepublicvoidonActivityCreated(BundlesavedInstanceState){super.onActivityCreated(savedInstanceState);intlayoutID=android.R.layout.simple_list_item_1;aa=newArrayAdapter<Quake>(getActivity(),layoutID,earthquakes);setListAdapter(aa);Threadt=newThread(newRunnable(){@Overridepublicvoidrun(){refreshEarthquakes();}});t.start();}privatestaticfinalStringTAG="EARTHQUAKE";privateHandlerhandler=newHandler();privatevoidrefreshEarthquakes(){//GettheXMLURLurl;try{StringquakeFeed=getString(R.string.quake_feed);url=newURL(quakeFeed);URLConnectionconnection;connection=url.openConnection();HttpURLConnectionhttpConnection=(HttpURLConnection)connection;intresponseCode=httpConnection.getResponseCode();if(responseCode==HttpURLConnection.HTTP_OK){InputStreamin=httpConnection.getInputStream();DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();//Parsetheearthquakefeed.Documentdom=db.parse(in);ElementdocEle=dom.getDocumentElement();//Cleartheoldearthquakesearthquakes.clear();//Getalistofeachearthquakeentry.NodeListnl=docEle.getElementsByTagName("entry");if(nl!=null&&nl.getLength()>0){for(inti=0;i<nl.getLength();i++){Elemententry=(Element)nl.item(i);Elementtitle=(Element)entry.getElementsByTagName("title").item(0);Elementg=(Element)entry.getElementsByTagName("georss:point").item(0);Elementwhen=(Element)entry.getElementsByTagName("updated").item(0);Elementlink=(Element)entry.getElementsByTagName("link").item(0);Stringdetails=title.getFirstChild().getNodeValue();Stringhostname="";StringlinkString=hostname+link.getAttribute("href");Stringpoint=g.getFirstChild().getNodeValue();Stringdt=when.getFirstChild().getNodeValue();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'");Dateqdate=newGregorianCalendar(0,0,0).getTime();try{qdate=sdf.parse(dt);}catch(ParseExceptione){Log.d(TAG,"Dateparsingexception.",e);}String[]location=point.split("");Locationl=newLocation("dummyGPS");l.setLatitude(Double.parseDouble(location[0]));l.setLongitude(Double.parseDouble(location[1]));StringmagnitudeString=details.split("")[1];intend=magnitudeString.length()-1;doublemagnitude=Double.parseDouble(magnitudeString.substring(0,end));details=details.split(",")[1].trim();finalQuakequake=newQuake(qdate,details,l,magnitude,linkString);//Processanewlyfoundearthquakehandler.post(newRunnable(){@Overridepublicvoidrun(){addNewQuake(quake);}});}}}}catch(MalformedURLExceptione){Log.d(TAG,"MalformedURLException",e);}catch(IOExceptione){Log.d(TAG,"IOException",e);}catch(ParserConfigurationExceptione){Log.d(TAG,"ParserConfigurationException",e);}catch(SAXExceptione){Log.d(TAG,"SAXException",e);}finally{}}privatevoidaddNewQuake(Quake_quake){//Addthenewquaketoourlistofearthquakes.earthquakes.add(_quake);//Notifythearrayadapterofachange.aa.notifyDataSetChanged();}}1.重写onActivityCreated()方法,绑定适配器,在线程(thread)中刷新地震信息(refreshEarthquakes);2.刷新地震信息refreshEarthquakes()方法,根据订阅源(feed),创建HTTP链接;3.解析文档(parse),清空数据(clear);4.解析atom格式的标签,根据标签属性,输出相应的信息;5.实例化(new)Quake类,在handler(句柄)中,运行添加地震信息的方法(addNewQuake);6.注意链接需要相应的异常捕获(catch)方式,否则报错;7.网络调用(networkcall)在主Activity调用,会报错,需要在线程,后台(asynctask)运行;8.Handler会产生歧义,注意使用Android的相应类,不是java的,否则无法实例化(initialized)9.日期格式(SimpleDateFormat)解析,需要匹配相应的字符串,否则抛出异常,无法解析(parse);10添加新的地震信息(addNewQuake),通知适配器(notifyDataSetChanged),进行改变.位置:res->values->strings<?xmlversion="1.0"encoding="utf-8"?><resources>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论