Android 获取并解析网络XML与数据上传

最近比较忙,没什么时间写博客,现在以后多补补吧,这次写的是安卓客户端上传和下载网络数据

原理很简单,使用JDBC读取数据库数据,并在网页输出XML文件;安卓客户端获取XML文件进行解析(这里使用的是PULL方式)

先看下后台和Android客户端代码的结构:

Android 获取并解析网络XML与数据上传Android 获取并解析网络XML与数据上传

Web后台代码:

1、Model

package com.homework.schoolnews; public class Schoolnews { private int id; private String title; private String content; //内容 private String shareDate; //分享时间 private String pictureuri; //图片路径 private String shareperson;//分享人 public Schoolnews(int id, String title,String content, String shareDate, String pictureuri, String shareperson) { super(); this.id = id; this.title = title; this.content = content; this.shareDate = shareDate; this.pictureuri = pictureuri; this.shareperson = shareperson; } public Schoolnews() { // TODO Auto-generated constructor stub } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getShareDate() { return shareDate; } public void setShareDate(String shareDate) { this.shareDate = shareDate; } public String getPictureuri() { return pictureuri; } public void setPictureuri(String pictureuri) { this.pictureuri = pictureuri; } public String getShareperson() { return shareperson; } public void setShareperson(String shareperson) { this.shareperson = shareperson; } } 

2、JDBC

package myservice; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JDBCService { private java.sql.Connection connection=null; private java.sql.Statement statement=null; private PreparedStatement preparedStatement=null; private ResultSet resultSet=null; private String className="com.mysql.jdbc.Driver"; //MySQL数据库链接 private String url="jdbc:mysql://localhost:3306/schoolnews?user=root&password=123456"; //取得数据库连接 public java.sql.Connection getConnection(){ try { Class.forName(className).newInstance(); connection=DriverManager.getConnection(url); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return connection; } //关闭数据库 public void close(){ try { //注意关闭顺序 if (resultSet!=null) resultSet.close(); if (statement!=null) statement.close(); if (preparedStatement!=null) preparedStatement.close(); if (connection!=null) connection.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } //查询并返回结果集 public ResultSet query(String sql){ try { connection=getConnection(); statement=connection.createStatement(); resultSet=statement.executeQuery(sql); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return resultSet; } public void add(String sql){ try { connection=getConnection(); statement=connection.createStatement(); statement.execute(sql); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } 

3、获取数据库数据

package myservice; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import model.Schoolnews; public class SchoolNewsXML { public List<Schoolnews> getSchoolNews() throws SQLException { JDBCService jDBCService = new JDBCService(); List<Schoolnews> snews = new ArrayList<Schoolnews>(); Schoolnews schoolnews = null; ResultSet resultSet = jDBCService.query("select * from t_snews"); while (resultSet.next()) { schoolnews = new Schoolnews(); schoolnews.setTitle(resultSet.getString(2)); schoolnews.setContent(resultSet.getString(3)); schoolnews.setShareDate(resultSet.getString(4)); schoolnews.setShareperson(resultSet.getString(5)); schoolnews.setPictureuri(resultSet.getString(6)); snews.add(schoolnews); } return snews; } } 

4、ServletForXML

package snewsservlet; import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.Schoolnews; import myservice.SchoolNewsXML; public class ServletForXML extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private SchoolNewsXML schoolNewsXML=new SchoolNewsXML(); public ServletForXML() { super(); } public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Schoolnews> snews = null; try { snews = schoolNewsXML.getSchoolNews(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("snews", snews); String path="/index.jsp"; request.getRequestDispatcher(path); ServletContext application =this.getServletContext(); RequestDispatcher rd=application.getRequestDispatcher(path); //跳转 rd.forward(request,response); } public void init() throws ServletException { // Put your code here } } 

5、网页输出XML

<%@ page language="java" contentType="text/xml;charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><?xml version="1.0" encoding="UTF-8"?> <Schoolnewses><c:forEach items="${snews}"var="Schoolnews"> <Schoolnews id="${Schoolnews.id}"> <title>${Schoolnews. title}</title> <content>${Schoolnews.content}</content> <sharedate>${Schoolnews.shareDate}</sharedate> <shareperson>${Schoolnews.shareperson}</shareperson> <pictureuri>${Schoolnews.pictureuri}</pictureuri> </Schoolnews> </c:forEach> </Schoolnewses> 

6、Servlet配置文件:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>ServletForXML</servlet-name> <servlet-class>snewsservlet.ServletForXML</servlet-class> </servlet> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>AddsnewsServlet</servlet-name> <servlet-class>snewsservlet.AddsnewsServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletForXML</servlet-name> <url-pattern>/servlet/ServletForXML</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AddsnewsServlet</servlet-name> <url-pattern>/servlet/AddsnewsServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 

7、请求:http://localhost:8080/androidHomework/servlet/ServletForXML时得到的效果:

Android 获取并解析网络XML与数据上传

接下来是在Android里面获取并解析xml,以下是主要代码,Activity那些就不贴出来了,主要核心是获取xml和解析xml

8、SchoolNewsService

package com.homework.schoolnews; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.util.Xml; public class SchoolNewsService { public static List<Schoolnews> getSchoolNews() throws MalformedURLException, IOException, XmlPullParserException { String path = "http://172.19.55.121:8080/androidHomework/servlet/ServletForXML"; HttpURLConnection con = (HttpURLConnection) new URL(path) .openConnection(); con.setConnectTimeout(15000); con.setRequestMethod("GET"); int i=con.getResponseCode(); if(i==200){ InputStream in = con.getInputStream(); return parseXML(in); } return null; } /* * pull方法解析xml */ private static List<Schoolnews> parseXML(InputStream in) throws XmlPullParserException, IOException { List<Schoolnews> snews = null; Schoolnews schoolnews = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(in, "UTF-8"); int event = pullParser.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: snews = new ArrayList<Schoolnews>(); break; case XmlPullParser.START_TAG: if ("Schoolnews".equals(pullParser.getName())) { int id = new Integer(pullParser.getAttributeValue(0)); schoolnews = new Schoolnews(); schoolnews.setId(id); } if ("title".equals(pullParser.getName())) { schoolnews.setTitle(pullParser.nextText()); } if ("content".equals(pullParser.getName())) { schoolnews.setContent(pullParser.nextText()); } if ("sharedate".equals(pullParser.getName())) { schoolnews.setShareDate(pullParser.nextText()); } if ("shareperson".equals(pullParser.getName())) { schoolnews.setShareperson(pullParser.nextText()); } if ("pictureuri".equals(pullParser.getName())) { schoolnews.setPictureuri(pullParser.nextText()); } break; case XmlPullParser.END_TAG: if ("Schoolnews".equals(pullParser.getName())) { snews.add(schoolnews); schoolnews = null; } break; } event = pullParser.next(); } return snews; } } 
安卓获取并显示数据://2013-08-09 添加-Mr_Tank_
package com.homework.schoolnews;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.homew.shouldnews.R;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.*;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		ImageButton bt_add = (ImageButton) this.findViewById(R.id.snews_add);
		find();
		
		//添加校园新鲜事
		bt_add.setOnClickListener(new ImageButton.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, AddsnewsActivity.class);
				startActivity(intent);
			}
		});
		

	}

	private void find(){
		final ListView lv = (ListView) this.findViewById(R.id.snews_listView);
		try {
			List<Schoolnews> snews = SchoolNewsService.getSchoolNews();
			List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
			for (Schoolnews schoolnews : snews) {
				HashMap<String, Object> item = new HashMap<String, Object>();
				item.put("id", schoolnews.getId());
				item.put("title", schoolnews.getTitle());
				item.put("content", schoolnews.getContent());
				item.put("sharedate", schoolnews.getShareDate());
				item.put("shareperson", schoolnews.getShareperson());
				item.put("pictureuri", schoolnews.getPictureuri());
				data.add(item);
			}

			SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, data,
					R.layout.snews, new String[] { "title", "sharedate",
							"shareperson", "content" }, new int[] {
							R.id.snews_title, R.id.snews_shareTime,
							R.id.snews_writer, R.id.snews_content });
			lv.setAdapter(adapter);

		} catch (Exception ex) {
		}

	}

	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



效果:
Android 获取并解析网络XML与数据上传
数据上传:
package com.homework.schoolnews;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class AddsnewsService {

	// 静态方法
	public static boolean save(String title, String content, String shareperson)
			throws MalformedURLException, IOException {
		String path = "http://172.19.55.121:8080/androidHomework/servlet/AddsnewsServlet?title="
			+URLEncoder.encode(title, "UTF-8")+"&snewscontent="
			+URLEncoder.encode(content, "UTF-8")+"&shareperson="+URLEncoder.encode(shareperson, "UTF-8");
		
/*bug
 *用以下方法装配path里有点问题 ,shareperson,上传到服务器的时候为null.
 */		
//		Map<String, String> params = new HashMap<String, String>();
//
//		params.put("title", title);
//		params.put("snewscontent", content);
//		params.put("shareperson", shareperson);
//
//		StringBuilder sb = new StringBuilder(path);

		// 装配path
//		for (Map.Entry<String, String> entry : params.entrySet()) {
//			// 获取键
//			sb.append(entry.getKey()).append("=");
//			sb.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
//			sb.append("&");
//		}
		// 删除装配path时多装配的&字符
		//sb.deleteCharAt(sb.length() - 1);

		HttpURLConnection con = (HttpURLConnection) new URL(path)
				.openConnection();
		con.setConnectTimeout(15000);
		con.setRequestMethod("GET");
		con.setDoOutput(true);// 允许对外传输数据

		byte[] pathdata = path.toString().getBytes();

		// 设置通用的请求属性
//		con.setRequestProperty("accept", "*/*");
//		con.setRequestProperty("connection", "Keep-Alive");
//		con.setRequestProperty("user-agent",
//				"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
//		
//		con.setRequestProperty("Content-Length", pathdata.length + "");
//		con.connect();
		OutputStream out = con.getOutputStream();
		out.write(pathdata);
		out.flush();
		if (con.getResponseCode() == 200) {
			return true;
		}
		return false;
	}

}







你可能感兴趣的:(android)