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

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

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


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,以下是主要代码,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 {@Overrideprotected 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent 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) {}}@Overridepublic 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;}}


效果:
 
数据上传:
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;}}


   

更多相关文章

  1. Android数据库编程SQLite详解
  2. [Android(安卓)API学习]Data Storage胡乱翻译(1)
  3. Android(安卓)OCR之tesseract
  4. Android(安卓)MVVM框架熟悉
  5. android转屏时数据保存问题
  6. android sqlite 简明教程
  7. Android之SQLite 学习一
  8. sparseArray
  9. SQLite基础

随机推荐

  1. android - 为安全而设计 - 2 - 开发文档
  2. 控件位置
  3. Android下Service入门
  4. Android(安卓)系统(194)---Android实践 --
  5. Activity对象的onCreate方法真是Android
  6. Android(安卓)列表选择框 Spinner详解及
  7. Android实现上下滑动效果
  8. android 横竖屏转换
  9. Android系列之浅谈Android(安卓)3D旋转
  10. Android(安卓)UI开发第二十八篇——Fragm