android的SAX解析XML文件的简单的例子SaxXmlDemoActivity

android中有几种解析XML文件的方法,现在呢,看一个SAX解析XML文件的实现过程

首先看看布局的实现

notes.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="android的SAX解析XML的测试" />
    <ListView
        android:id="@+id/noteslist"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
       
        />

</LinearLayout>


notesdetial.xml


 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#FFFFFF" >
  <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:paddingTop="15dp"
        android:orientation="horizontal" >

        <ImageView
              android:id="@+id/notesimg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dip"
            android:src="@drawable/icon_default_avatar" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/notesheaddetial"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="3dp"
                android:textColor="#2E8B57"
                android:textSize="15sp" />

            <TextView
                  android:id="@+id/notestimedetial"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="10dp"
                  android:textColor="#292421"
                android:textSize="13sp" />
        </LinearLayout>
    </LinearLayout>

    <TextView
          android:id="@+id/notestextdetial"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="15dip"
         android:textColor="#000000"
         />

   
</LinearLayout>
</LinearLayout>

 

listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#FFFFFF" >
  <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:paddingTop="15dp"
        android:orientation="horizontal" >

        <ImageView
              android:id="@+id/notesimg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dip"
            android:src="@drawable/icon_default_avatar" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/noteshead"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="3dp"
                android:textColor="#2E8B57"
                android:textSize="15sp" />

            <TextView
                  android:id="@+id/notestime"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingTop="10dp"
                  android:textColor="#292421"
                android:textSize="13sp" />
        </LinearLayout>
    </LinearLayout>

    <TextView
          android:id="@+id/notestext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:maxLines="5"
        android:ellipsize="end"
        android:padding="15dip"
         android:textColor="#000000"
         />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:paddingBottom="10dp"
        android:paddingRight="20dp" >

        <TextView
            android:id="@+id/pinglun"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
             android:textColor="#2E8B57"
            android:background="@drawable/con_btn_bg"
            android:drawableLeft="@drawable/img_icon_comment"
            android:text="评论" />

        <TextView
            android:id="@+id/zan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/pinglun"
             android:textColor="#2E8B57"
            android:background="@drawable/con_btn_bg"
            android:drawableLeft="@drawable/img_icon_praise_clicked"
            android:layout_marginRight="15dp"
            android:text="赞" />
    </RelativeLayout>
</LinearLayout>
</LinearLayout>


需要SAX解析的XMl文件放在raw文件下的notesax.xml

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

  <resource >
      <noteshead> 程序员日志</noteshead>
      <notestime> 1分钟前</notestime>
	 <notestext>   对于一个程序员来说,学习的重要性相信大家都能意识得到。如何才能有效地学习,高效地学习?探讨下这个问题,我认为很有必要。每个人学习的方法和习惯可能都不尽相同,很多人习惯了在学校的学习方式,特别是很多刚出校门的人。在他们潜意识中,学习只是应付考试的一种手段,考完就一切OK了,全部还给老师了也无所谓,反正考完之后下次不会再考这么课程了(大学尤其如此)。长期的应试教育会让很多人以考试的心态来对待学习,我也是受害者之一,翻翻我硬盘中散落的各种语言编写的"hello world",各种半成品,它们就像一张张60分、80分的试卷悄无声息地躺在某个昏暗的角落里。 </notestext>
     </resource>
   
  
          <resource >
      <noteshead> hhe</noteshead>
      <notestime> 1分钟前</notestime>
	 <notestext> 1111</notestext>
     </resource>
     
             <resource >
      <noteshead> hhe</noteshead>
      <notestime> 1分钟前</notestime>
	 <notestext> 222</notestext>
     </resource>
     
                <resource >
      <noteshead> hhe</noteshead>
      <notestime> 1分钟前</notestime>
	 <notestext> 3</notestext>
     </resource>
</resources>


然后呢是SAX解析XML实现活动的方法notesSAX

 

package com.nyist.SAX;

import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class notesSAX extends DefaultHandler {
	private List<notesGS> notesList;
	private notesGS notes;
	private String tagname;

	public notesSAX(List<notesGS> noteslist) {

		super();
		this.notesList = noteslist;

	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		// TODO Auto-generated method stub

		String temp = new String(ch, start, length);
		if (tagname.equals("noteshead")) {
			notes.setNoteshead(temp);
		} else if (tagname.equals("notestime")) {
			notes.setNotestime(temp);
		} else if (tagname.equals("notestext")) {
			notes.setNotestext(temp);
		}

		super.characters(ch, start, length);
	}

	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		// TODO Auto-generated method stub
		if (qName.equals("resource")) {
			notesList.add(notes);
		}
		tagname="";
		
		super.endElement(uri, localName, qName);
	}

	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		
		super.startDocument();
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		if (localName.equals("resource")) {
			notes=new notesGS();
			
		}
		tagname=localName;
		super.startElement(uri, localName, qName, attributes);
	}

}


 

SAX解析XML文件的Get和Set的方法notesGS

package com.nyist.SAX;

public class notesGS {
	private String noteshead;
	private String notestime;
	private String notestext;

	public String getNoteshead() {
		return noteshead;
	}

	public void setNoteshead(String noteshead) {
		this.noteshead = noteshead;
	}

	public String getNotestime() {
		return notestime;
	}

	public void setNotestime(String notestime) {
		this.notestime = notestime;
	}

	public String getNotestext() {
		return notestext;
	}

	public void setNotestext(String notestext) {
		this.notestext = notestext;
	}

	public notesGS() {
		super();
	}

	public void notesdetial(String noteshead, String notestime, String notestext) {

		this.noteshead = noteshead;
		this.notestext = notestext;
		this.notestime = notestime;
	}

}


SaxXmlDemoActivity

package com.nyist.activity;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import com.nyist.SAX.notesGS;
import com.nyist.SAX.notesSAX;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class SaxXmlDemoActivity extends Activity {
private ListView noteslistView;
private MyAdapter adapter=null;
List<notesGS> list=new ArrayList<notesGS>();
private int images[]={R.drawable.icon_default_avatar};
//	      private int images[]={R.drawable.b1,R.drawable.b2,R.drawable.b3,R.drawable.b4,
//			R.drawable.b5,R.drawable.b6,R.drawable.b7,R.drawable.b8,R.drawable.b9,
//			R.drawable.b10,R.drawable.b11,R.drawable.b12,R.drawable.b13,R.drawable.b14};
  
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.notes);
        
        noteslistView=(ListView)findViewById(R.id.noteslist);
        
		SAXParserFactory notesfactory = SAXParserFactory.newInstance();
		try {
			XMLReader reader = notesfactory.newSAXParser().getXMLReader();
			notesSAX notesSAX=new notesSAX(list);
			reader.setContentHandler(notesSAX);
			InputStream ip = getResources().openRawResource(R.raw.notesax);
			reader.parse(new InputSource(ip));
		} catch (Exception e) {
		e.printStackTrace();
		}
		adapter = new MyAdapter(this,list);
		noteslistView.setAdapter(adapter);
	//	Toast.makeText(SaxXmlDemoActivity.this, "亲、你点击了我", Toast.LENGTH_SHORT).show();
	
	noteslistView.setOnItemClickListener(new  AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
		
				Intent intent=new Intent();
				intent.setClass(SaxXmlDemoActivity.this,NotesDetialText.class);
				Toast.makeText(SaxXmlDemoActivity.this, "亲、你点", Toast.LENGTH_SHORT).show();

				intent.putExtra("image", arg2);
				intent.putExtra("noteshead", list.get(arg2).getNoteshead());
				intent.putExtra("notestime", list.get(arg2).getNotestime());
				intent.putExtra("notestext", list.get(arg2).getNotestext());
				
			     startActivity(intent);
			}
			
		});
		

		//Toast.makeText(SaxXmlDemoActivity.this, "亲.......", Toast.LENGTH_SHORT).show();
    }
 
    public class MyAdapter extends BaseAdapter{
    	private LayoutInflater myinInflater;
		private List<notesGS> list;
		
		public List<notesGS> getList(){
			
			return list;
		}
		public MyAdapter(Context context, List<notesGS> list) {
			this.myinInflater = LayoutInflater.from(context);
			this.list = list;
		}
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return list.size();
    	}

    	@Override
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return null;
    	}

    	@Override
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return 0;
    	}

    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				// 
				holder = new ViewHolder();
				convertView = myinInflater.inflate(R.layout.listview_item, null);
				holder.noteshead = (TextView) convertView
						.findViewById(R.id.noteshead);
				holder.notestime = (TextView) convertView
						.findViewById(R.id.notestime);
				holder.notestext = (TextView) convertView
						.findViewById(R.id.notestext);

			    holder.image=(ImageView)convertView.findViewById(R.id.notesimg);
			    convertView.setTag(holder);

			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			// 设置各个Item中的组件
			
		
			holder.noteshead.setText(list.get(position).getNoteshead());
			holder.notestime.setText(list.get(position).getNotestime());
			holder.notestext.setText(list.get(position).getNotestext());
			
			holder.image.setImageResource(images[0]);
			return convertView;
		}
    	
    }
    public final class ViewHolder {
		public ImageView image;
		public TextView noteshead;
		public TextView notestime;
		public TextView notestext;


	}
}


NotesDetialText

package com.nyist.activity;

import com.nyist.activity.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class NotesDetialText extends Activity {
	private int images[]={R.drawable.icon_default_avatar};
	private TextView noteshead,notestime,notestext;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.notesdetial);
		Intent intent=null;
		intent = getIntent();
		
		noteshead=(TextView)findViewById(R.id.notesheaddetial);
		notestime=(TextView)findViewById(R.id.notestimedetial);
		notestext=(TextView)findViewById(R.id.notestextdetial);
		
		noteshead.setText(intent.getStringExtra("noteshead"));
		notestime.setText(intent.getStringExtra("notestime"));
		notestext.setText(intent.getStringExtra("notestext"));
		
		
	}
}


 

最后呢,别忘了注册Acitvity

ps:运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值