Nasa Rss
View Code
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.35" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/imageTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<TextView
android:id="@+id/imageData"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<ImageView
android:id="@+id/imageDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:adjustViewBounds="true"
/>
<TextView
android:id="@+id/imageDescription"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
</ScrollView>
View Code
package com.lee; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.widget.ImageView; import android.widget.TextView; public class DownloadTask extends AsyncTask<String, Integer, Bitmap> { private Bitmap bitmap; private TextView imageTitle=null; private TextView imageDate=null; private ImageView imageView=null; private TextView imageDescription=null; IotdHandler myHandler=new IotdHandler(); public DownloadTask(TextView imageTitle2, TextView imageDate2, ImageView imageView2, TextView imageDescription2) { // TODO Auto-generated constructor stub this.imageView=imageView2; this.imageTitle=imageTitle2; this.imageDate=imageDate2; this.imageDescription=imageDescription2; } @Override protected Bitmap doInBackground(String... params) { myHandler.processFeed(); return null; } @Override protected void onPostExecute(Bitmap result) { imageTitle.setText(myHandler.getTitle()); imageDate.setText(myHandler.getData()); imageView.setImageBitmap(myHandler.getImage()); imageDescription.setText(myHandler.getDescription()); super.onPostExecute(result); } }
View Code
package com.lee; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; public class IotdHandler extends DefaultHandler { private String url="http://www.nasa.gov/rss/image_of_the_day.rss"; private boolean inUrl=false; private boolean inTitle=false; private boolean inDescription=false; private boolean inItem=false; private boolean inData=false; private Bitmap image=null; private String title=null; private StringBuffer description=new StringBuffer(); private String data=null; public void processFeed(){ try { SAXParserFactory factory=SAXParserFactory.newInstance(); SAXParser parser=factory.newSAXParser(); XMLReader reader=parser.getXMLReader(); reader.setContentHandler(this); InputStream inputStream=new URL(url).openStream(); reader.parse(new InputSource(inputStream)); } catch (Exception e) { e.printStackTrace(); } } private Bitmap getBitmap(String url){ try { HttpURLConnection connection=(HttpURLConnection)new URL(url).openConnection(); connection.setDoInput(true); connection.connect(); InputStream input=connection.getInputStream(); Bitmap bitmap=BitmapFactory.decodeStream(input); input.close(); return bitmap; } catch (Exception e) { return null;} } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("In--------------->"+localName); System.out.println("Start------>"+localName); if(localName.equals("enclosure")){url=attributes.getValue("url");inUrl=true;}else{inUrl=false;} if(localName.startsWith("item")){inItem=true;} else{ if(inItem){ if(localName.equals("title")){inTitle=true;} else{inTitle=false;} if(localName.equals("description")){inDescription=true;} else{inDescription=false;} if(localName.equals("pubDate")){inData=true;} else{inData=false;} } } } @Override public void characters(char[] ch, int start, int length) throws SAXException { String chars=new String(ch).substring(start,start+length); System.out.println(chars); if(inUrl){image=getBitmap(url);} if(inTitle&&title==null){title=chars;} if(inDescription){description.append(chars);} if(inData&&data==null){data=chars;} } public Bitmap getImage(){return image;} public String getTitle(){return title;} public StringBuffer getDescription(){return description;} public String getData(){return data;} }
做一下总结:
1、ANDROID较高的版本不允许在UI进程里加入费时的操作比如HTTPURL,利用了AsyncTask类,效果不错
2、学习了SAX处理RSS人方法,其中attibute的属于的应用可以解决标签内的数值提取
3、学会使用scrollview,这个效果跟好
4、中途犯了一个白痴的错误,在OnCreate()之前的变量调用了findViewById()函数


浙公网安备 33010602011771号