对于复杂数据,传统的String就有点力不从心了,因为复杂数据中包含各自特有的数据结构和存放方式
所以对于复杂数据我们会采用另外的形式来表示和传递:
1.xml---耗费流量,但是在浏览器中浏览时格式清晰
eclipse
所以对于复杂数据我们会采用另外的形式来表示和传递:
1.xml---耗费流量,但是在浏览器中浏览时格式清晰
2.json---节省流量,但是不利用第三方jar包时,格式混乱
在Eclipse这边新建一个Web工程AndroidWebServer
导入在lib中导入驱动数据库的包sql包,Jason需要的第三包jar包(5)个
dao/BaseDao.java链接数据库
dao/UserInfo.java 针对数据库数据的查找所有的方法
entity/UserInfo.java 数据库对应的实体包
servlet/GetJsonServlet.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import dao.UserInfoDao;
import entity.UserInfo;
public class GetJsonServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
UserInfoDao dao=new UserInfoDao();
ArrayList list=dao.findAll();
JSONArray array=new JSONArray();
//封装数据为json格式
for(int i=0;i<list.size();i++){
UserInfo obj=(UserInfo)list.get(i);
JSONObject jObj=new JSONObject();
jObj.put("id", obj.getId()+"");
jObj.put("name", obj.getUser_name());
jObj.put("sex", obj.getUser_sex());
jObj.put("age", obj.getUser_age());
jObj.put("hobby", obj.getUser_hobby());
jObj.put("city", obj.getUser_city());
jObj.put("mtext", obj.getMtext());
array.put(jObj);
}
out.println(array.toString());
out.flush();
out.close();
}
}
eclipse
在MainActivity.java中只需要一个按钮来触发方法
主要代码如下:
new AsyncTask(){
@Override
protected Object doInBackground(Object... params) {
StringBuffer msg=new StringBuffer();
try{
URL url=new URL(params[0].toString());
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(6000);
if(conn.getResponseCode()==200){
InputStream in=conn.getInputStream();
int len=0;
byte[] buffer=new byte[1024];
ByteArrayOutputStream bos=new ByteArrayOutputStream();
while((len=in.read(buffer))>0){
bos.write(buffer, 0, len);
}
JSONArray array=new JSONArray(new String(bos.toByteArray()));
for(int i=0;i<array.length();i++){
JSONObject obj=array.getJSONObject(i);
msg.append(obj.getString("name"));
if(i<array.length()-1){
msg.append(",");
}
}
}else{
msg.append("无法连接服务器,请检查网络");
}
}catch(Exception e){
e.printStackTrace();
}
return msg.toString();
}
@Override
protected void onPostExecute(Object result) {
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("服务器消息");
dialog.setMessage(result.toString());
dialog.setNegativeButton("确定", null);
dialog.show();
}
}.execute("http://172.20.4.112:8088/AndroidWebServer/getJson.do");