详解android与服务端交互的两种方式
做Android开发的程序员必须知道android客户端应该如何与服务端进行交互,这里主要介绍的是使用json数据进行交互。服务端从数据库查出数据并以json字符串的格式或者map集合的格式返回到客户端,客户端进行解析并输出到手机屏幕上。
此处介绍两种方式:使用Google原生的Gson解析json数据,使用JSONObject解析json数据
一、使用Google原生的Gson解析json数据:
记得在客户端添加gson.jar。
核心代码:
服务端:
packagecom.mfc.ctrl;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
importcom.mfc.dao.TblUserDao;
importcom.mfc.entity.TblUser;
/**
*2017年7月6日06:26:40
*对用户操作的控制器类
**/
@Controller
@RequestMapping("tblUserCtrl")
publicclassTblUserCtrl{
@Resource(name="tblUserDao")
TblUserDaotblUserDao;
//添加用户
@RequestMapping("addUser")
@ResponseBody
publicObjectaddUser(HttpServletRequestrequest){
Stringuname=request.getParameter("uname");
Stringupass=request.getParameter("upass");
floatmoney=Float.parseFloat(request.getParameter("money"));
System.out.println(uname+"==="+upass+"==="+money);
TblUsertblUser=newTblUser();
tblUser.setMoney(money);
tblUser.setUname(uname);
tblUser.setUpass(upass);
tblUserDao.addUser(tblUser);
Mapmap=newHashMap();
map.put("success","success");
returnmap;
}
//查看所有用户
@RequestMapping("getAllUser")
@ResponseBody
publicObjectgetAllUser(){
Listlist=tblUserDao.selectAllUser();
Mapmap=newHashMap();
map.put("list",list);
returnmap;
}
//删除用户
@RequestMapping("delUser")
@ResponseBody
publicObjectdelUser(HttpServletRequestrequest){
intuid=Integer.parseInt(request.getParameter("uid"));
TblUsertblUser=tblUserDao.getUserById(uid);
tblUserDao.delUser(tblUser);
Mapmap=newHashMap();
map.put("success","success");
returnmap;
}
//修改用户
@RequestMapping("updateUser")
@ResponseBody
publicObjectupdateUser(HttpServletRequestrequest){
intuid=Integer.parseInt(request.getParameter("uid"));
Stringuname=request.getParameter("uname");
Stringupass=request.getParameter("upass");
floatmoney=Float.parseFloat(request.getParameter("money"));
TblUsertblUser=newTblUser();
tblUser.setMoney(money);
tblUser.setUid(uid);
tblUser.setUname(uname);
tblUser.setUpass(upass);
tblUserDao.updateUser(tblUser);
Mapmap=newHashMap();
map.put("success","success");
returnmap;
}
}
客户端:
拼接URL的类:
packagecom.mfc.urlutils;
importjava.util.Map;
/**
*2017年7月6日06:42:10
*一些URL需要使用的公用数据及方法
**/
publicclassSomePublicData{
//公用path
publicstaticfinalStringpath="http://192.168.0.111:8080/MyeclipseService/tblUserCtrl/";
//拼接path
publicstaticStringfullPath(Stringpathlast,Mapmap){
StringBuilderbuilder=newStringBuilder();
StringrealPath=null;
if(map!=null&&!map.isEmpty()){
//拼接url的参数部分
for(Map.Entryentrty:map.entrySet()){
builder.append(entrty.getKey()).append("=");
builder.append(entrty.getValue()).append("&");
}
builder.deleteCharAt(builder.length()-1);
//拼接最后完整的url
realPath=SomePublicData.path+pathlast+"?"+builder;
returnrealPath;
}
returnSomePublicData.path+pathlast;
}
}
访问服务器的类:
packagecom.mfc.urlutils;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.params.HttpConnectionParams;
importorg.apache.http.params.HttpParams;
/**
*2017年7月6日06:55:26
*将客户端数据传送到服务器,并接受服务器返回的数据
**/
publicclassSendDateToServer{
publicstaticStringsendToServer(Stringpath){
StringBuilderbuilder=newStringBuilder();
try{
HttpClientclient=newDefaultHttpClient();
if(path!=null&&path.length()>0){
if(client!=null){
HttpParamshttpParams=client.getParams();
if(httpParams!=null){
HttpConnectionParams.setConnectionTimeout(httpParams,60000);
HttpConnectionParams.setSoTimeout(httpParams,60000);
HttpGetget=newHttpGet(path);
if(get!=null){
HttpResponsehttpResponse=client.execute(get);
if(httpResponse!=null){
HttpEntityentity=httpResponse.getEntity();
if(entity!=null){
BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(entity.getContent()));
Stringline=null;
while((line=bufferedReader.readLine())!=null){
builder.append(String.format("%s\n",line));
}
bufferedReader.close();
}
}
}
}
}
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnbuilder.toString();
}
}
解析json数据的类:
packagecom.mfc.jsonutils;
importjava.util.ArrayList;
importjava.util.List;
importorg.json.JSONObject;
importcom.google.gson.Gson;
importcom.google.gson.JsonArray;
importcom.google.gson.JsonElement;
importcom.google.gson.JsonParser;
importcom.mfc.entity.TblUser;
/**
*2017年7月6日07:15:32
*解析json数据的类
**/
publicclassGetJsonToEntity{
//解析单个数据
publicstaticTblUsergetTblUser(StringjsonString){
Gsongson=newGson();
TblUsertblUser=gson.fromJson(jsonString,TblUser.class);
returntblUser;
}
//解析list集合
publicstaticListgetTblUserList(StringgsonString){
Listlistusers=GsonUtil.parseJsonArrayWithGson(gsonString,TblUser.class);
returnlistusers;
}
}
/**
*2017年7月6日15:45:43
*封装的json解析工具类,提供泛型参数
**/
classGsonUtil{
//将json数据解析成相应的映射对象
publicstaticTparseJsonWithGson(StringjsonData,Classtype){
Gsongson=newGson();
Tresult=gson.fromJson(jsonData,type);
returnresult;
}
//将json数组解析成相应的映射对象列表
publicstaticListparseJsonArrayWithGson(StringjsonData,Classtype){
Listresult=newArrayList();
try{
Gsongson=newGson();
JSONObjectjsonObject=newJSONObject(jsonData);
Stringstring=jsonObject.getString("list");
JsonArrayarry=newJsonParser().parse(string).getAsJsonArray();
for(JsonElementjsonElement:arry){
result.add(gson.fromJson(jsonElement,type));
}
}catch(Exceptione){
e.printStackTrace();
}
returnresult;
}
}
调用这些方法的Activity以及实体类省略。
二、使用JSONObject解析json数据
注意:服务端要添加json的jar包。
客户端解析json数据的代码:
packagecom.mfc.jsonutils;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importorg.json.JSONArray;
importorg.json.JSONException;
importorg.json.JSONObject;
importcom.mfc.entity.Task;
/**
*2017年6月25日21:34:44
*解析json的工具类
*这里面所有方法的key,都是json一层数据的键,注意传数据时调用本类方法的时候给的key值
**/
publicclassParseJson{
//解析单条数据
publicstaticTaskgetTask(Stringkey,Stringjson){
Tasktask=newTask();
try{
JSONObjectjsonObject=newJSONObject(json);
JSONObjecttaskObject=jsonObject.getJSONObject(key);
task.setTid(taskObject.getInt("uid"));
task.setContent(taskObject.getString("content"));
task.setIssuccess(taskObject.getInt("issuccess"));
task.setTasktime(taskObject.getString("tasktime"));
task.setTitle(taskObject.getString("title"));
task.setUid(taskObject.getInt("uid"));
}catch(JSONExceptione){
e.printStackTrace();
}
returntask;
}
//解析list集合
publicstaticListgetListTask(Stringkey,StringjsonString){
Listlist=newArrayList();
try{
JSONObjectjsonObject=newJSONObject(jsonString);
//解析json数组
JSONArrayarray=jsonObject.getJSONArray(key);
for(inti=0;igetList(Stringkey,StringjsonString){
Listlist=newArrayList();
try{
JSONObjectjsonObject=newJSONObject(jsonString);
JSONArrayjsonArray=jsonObject.getJSONArray(key);
for(inti=0;i>getListMap(Stringkey,StringjsonString){
List
客户端接收服务端的数据方法:
packagecom.mfc.urlutils;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
importorg.apache.http.entity.StringEntity;
importandroid.util.Log;
publicclassHttpUtils{
staticStringTAG="HttpUtils";
/**
*从服务器获取json数据
**/
publicstaticStringgetJsonContent(Stringpath){
StringjsonString="";
try{
URLurl=newURL(path);
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();
connection.setConnectTimeout(3000);
connection.setRequestMethod("GET");
connection.setDoInput(true);
intcode=connection.getResponseCode();
if(code==200){
InputStreaminputStream=connection.getInputStream();
ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();
intlen=0;
byte[]data=newbyte[1024];
while((len=inputStream.read(data))!=-1){
outputStream.write(data,0,len);
}
jsonString=newString(outputStream.toByteArray());
Log.i(TAG,jsonString);
}
}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnjsonString;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。