一堆堆乌云,像青色的火焰,在无底的大海上燃烧。大海抓住闪电的箭光,把它们熄灭在自己的深渊里。这些闪电的影子,活像一条条火蛇,在大海里蜿蜒游动,一晃就消失了。
——暴风雨!暴风雨就要来啦!
这是勇敢的海燕,在怒吼的大海上,在闪电中间,高傲地飞翔;这是胜利的预言家在叫喊:
——让暴风雨来得更猛烈些吧!
高尔基《海燕》
我用的是SSM框架写的
Java代码:
UserController.java
@Controller
@RequestMapping("/front/")
public class UserController {
@Autowired
UserDao ud;
@RequestMapping("adduser.xhtml")
public String AddUser(Userentity userentity,HttpServletRequest request){
String uname=request.getParameter("uname");
String pwd=request.getParameter("pwd");
Userentity user=new Userentity();
user.setUname(uname);
user.setPwd(pwd);
int n=ud.addUser(user);
if(n>0){
System.out.println("增加成功");
}else{
System.out.println("增加失败");
}
return "index";
}
@RequestMapping("getuser.xhtml")
public String getuser(HttpServletRequest request){
List<Userentity> list=new ArrayList<Userentity>();
list=ud.getUsers();
request.setAttribute("list", list);
return "index";
}
}
UserDao.java
public interface UserDao {
public int addUser(Userentity userentiy);
public List<Userentity > getUsers();
Userentity.java
public class Userentity {
private Integer uid;
private String uname;
private String pwd;
public Userentity(){
}
public Userentity(Integer uid, String uname, String pwd) {
super();
this.uid = uid;
this.uname = uname;
this.pwd = pwd;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
Userentity.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zking.dao.UserDao">
<insert id="addUser" parameterType="com.zking.entity.Userentity">
INSERT into user values(null,#{uname},#{pwd});
</insert>
<select id="getUsers" resultType="com.zking.entity.Userentity">
select * from user
</select>
</mapper>
FastJsonHttpMessageConverter.java
public class FastJsonHttpMessageConverter extends
AbstractHttpMessageConverter<Object> {
public final static Charset UTF8 = Charset.forName("UTF-8");
private Charset charset = UTF8;
private SerializerFeature[] serializerFeature;
@Override
protected boolean supports(Class<?> clazz) {
return true;
}
@Override
protected Object readInternal(Class<? extends Object> clazz,
HttpInputMessage inputMessage) throws IOException,
HttpMessageNotReadableException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream in = inputMessage.getBody();
byte[] buf = new byte[1024];
for (;;) {
int len = in.read(buf);
if (len == -1) {
break;
}
if (len > 0) {
baos.write(buf, 0, len);
}
}
byte[] bytes = baos.toByteArray();
if (charset == UTF8) {
return JSON.parseObject(bytes, clazz);
} else {
return JSON.parseObject(bytes, 0, bytes.length,
charset.newDecoder(), clazz);
}
}
@Override
protected void writeInternal(Object obj, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
OutputStream out = outputMessage.getBody();
byte[] bytes;
if (charset == UTF8) {
if (serializerFeature != null) {
bytes = JSON.toJSONBytes(obj, serializerFeature);
} else {
bytes = JSON.toJSONBytes(obj,
SerializerFeature.WriteDateUseDateFormat);
}
} else {
String text;
if (serializerFeature != null) {
text = JSON.toJSONString(obj, serializerFeature);
} else {
text = JSON.toJSONString(obj,
SerializerFeature.WriteDateUseDateFormat);
}
bytes = text.getBytes(charset);
}
out.write(bytes);
}
}
index.jsp
<?xml version="1.0" encoding="UTF-8" ?><%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@page isELIgnored="false" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><fqs><c:forEach items="${list}" var="fq">
<fq name="${fq.uid}">
<name>${fq.name}</name>
<content>${fq.content}</content>
<time>${fq.time}</time>
</fq>
</c:forEach>
</fqs>
在这里的话能不空格就不要空格,要不然Android那边解析会出问题
Android:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.zking.risk_android_parsexml.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取XML"
android:onClick="getXML"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv_main_list"
></ListView>
</LinearLayout>
item_listview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Large Text"
android:id="@+id/tv_item_listview_name"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Large Text"
android:id="@+id/tv_item_listview_content"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Large Text"
android:id="@+id/tv_item_listview_time"
/>
</LinearLayout>
MainActity
public class MainActivity extends AppCompatActivity {
private ProgressDialog progressDialog;
private ListView lv_main_list;
private List<Userentity> lists = new ArrayList<>();
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main_list = (ListView) findViewById(R.id.lv_main_list);
myAdapter = new MyAdapter();
lv_main_list.setAdapter(myAdapter);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("正在拼命loading中.....");
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
Log.i("ListView:",lists.size()+" size:");
return lists.size();
}
@Override
public Object getItem(int i) {
return lists.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_listview, null);
ItemTag itemTag = new ItemTag();
itemTag.tv_name = (TextView) view.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content = (TextView) view.findViewById(R.id.tv_item_listview_content);
itemTag.tv_time = (TextView) view.findViewById(R.id.tv_item_listview_time);
view.setTag(itemTag);
}
ItemTag itemTag = (ItemTag) view.getTag();
itemTag.tv_name.setText(lists.get(i).getName());
itemTag.tv_content.setText(lists.get(i).getContent());
itemTag.tv_time.setText(lists.get(i).getTime());
return view;
}
}
public void getXML(View view) {
new MyTask().execute();
}
class MyTask extends AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] params) {
List<Userentity> fqs=new ArrayList<>();
//获取网络数据
//1.定义获取网络的数据的路径
String path = getString(R.string.server_name)+"getuser.xhtml";
try {
//2.实例化Url
URL url = new URL(path);
//3.获取连接对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//4.设置请求方式
connection.setRequestMethod("GET");
//5.设置请求连接超时的时间[APP优化]
connection.setConnectTimeout(5000);
//6.获取响应码
int code = connection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = connection.getInputStream();
//8.测试(删除-注释)
//缓冲字符流
String str = null;
// BufferedReader br = new BufferedReader(new InputStreamReader(is));
//
// while ((str = br.readLine()) != null) {
// Log.i("test", "str");
// }
//9.解析XML
//方式:DOM SAX PULL
//9.1 使用DOM解析
// try {
// DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// Document document = documentBuilder.parse(is);
// //获取根标签
// Element root = document.getDocumentElement();
// Log.i("test", "根标签:" + root.getTagName());
// NodeList nodeList = root.getElementsByTagName("fq");
// Log.i("test", "根标签:" + nodeList.getLength());
// for (int i = 0; i < nodeList.getLength(); i++) {
// Element element = (Element) nodeList.item(i);
// //获取属性name
// String name1 = element.getAttribute("name");
// Log.i("test", name1+"");
//
// //获取子标签<content><time>
// Element elementName = (Element) element.getElementsByTagName("name").item(0);
// String name = elementName.getTextContent();
//
// Element elementContent = (Element) element.getElementsByTagName("content").item(0);
// String content = elementContent.getTextContent();
//
// Element elementTime = (Element) element.getElementsByTagName("time").item(0);
// String time = elementTime.getTextContent();
// Log.i("test",name + " " + content + " " + time);
//
// Userentity ut = new Userentity(Integer.parseInt(name1),name, content, time);
// fqs.add(ut);
// }
// } catch (ParserConfigurationException e) {
// e.printStackTrace();
// } catch (SAXException e) {
// e.printStackTrace();
// }
//2.使用SAX解析:特点:边读边解析 基于事件(方法)驱动方式
//开始文档 开始标签 结束标签 结束文档 文本
// try {
// SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// SAXParser saxParser = saxParserFactory.newSAXParser();
// saxParser.parse(is, new DefaultHandler() {
// @Override
// public void startDocument() throws SAXException {
// super.startDocument();
// }
//
// @Override
// public void endDocument() throws SAXException {
// super.endDocument();
// }
//
// @Override
// public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// super.startElement(uri, localName, qName, attributes);
// currenTag = localName;
// if ("fq".equals(localName)) {
// //实例化对象
// userentity = new Userentity();
// String name = attributes.getValue(0);
// userentity.setName(name);
// }
//
// }
//
// @Override
// public void endElement(String uri, String localName, String qName) throws SAXException {
// super.endElement(uri, localName, qName);
//
// currenTag = null;
// if ("fq".equals(localName)) {
// fqs.add(userentity);
// }
//
//
// }
//
// @Override
// public void characters(char[] ch, int start, int length) throws SAXException {
// super.characters(ch, start, length);
//
// if ("content".equals(currenTag)) {
// String content = new String(ch, start, length);
// userentity.setContent(content);
// } else if ("time".equals(currenTag)) {
// String time = new String(ch, start, length);
// userentity.setTime(time);
// }
// }
// });
// } catch (ParserConfigurationException e) {
// e.printStackTrace();
// } catch (SAXException e) {
// e.printStackTrace();
// }
//3 使用PULL解析
try {
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(is, "UTF-8");
int type = pullParser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
//获取开始标签
String startTagName = pullParser.getName();
if ("fq".equals(startTagName)) {
userentity1 = new Userentity();
String name = pullParser.getAttributeValue(0);
userentity1.setName(name);
} else if ("content".equals(startTagName)) {
String content = pullParser.nextText();
userentity1.setContent(content);
} else if ("time".equals(startTagName)) {
String time = pullParser.nextText();
userentity1.setTime(time);
}
break;
case XmlPullParser.END_TAG:
//获取结束标签的名字
String endTagName = pullParser.getName();
if ("fq".equals(endTagName)) {
fqs.add(userentity1);
}
break;
}
//type必须要重新赋值,要不然会导致死循环
type = pullParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fqs;
}
//更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
List<Userentity> fqs = (List<Userentity>) o;
lists.addAll(fqs);
myAdapter.notifyDataSetChanged();
progressDialog.cancel();
}
}
}
ItemTag
public class ItemTag {
public TextView tv_uid;
public TextView tv_name;
public TextView tv_content;
public TextView tv_time;
}
Userentity
public class Userentity {
private int uid;
private String name;
private String content;
private String time;
public Userentity(int uid, String name, String content, String time) {
super();
this.uid = uid;
this.name = name;
this.content = content;
this.time = time;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {return content;}
public void setContent(String content) {
this.content = content;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
strings.xml
<string name="server_name">http://193.168.4.59:8080/front/</string>
在values里面的strings.xml我把IP地址写在了这里面,就可以让他在以后的XML解析方便调用就好了
最后要说的是我这里调用的都是数据库里的数据,而不是死的数据,当然要是死的数据那就方便很多了,每次联网的IP地址都会改变,所有每次连上网都要在strings.xml里面改下IP地址就可以了