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()函数

posted @ 2012-07-07 11:08  Epirus  阅读(348)  评论(0)    收藏  举报