做AndroID开发的程序员必须知道androID客户端应该如何与服务端进行交互,这里主要介绍的是使用Json数据进行交互。服务端从数据库查出数据并以Json字符串的格式或者map集合的格式返回到客户端,客户端进行解析并输出到手机屏幕上。
此处介绍两种方式:使用Google原生的Gson解析Json数据,使用JsONObject解析Json数据
一、使用Google原生的Gson解析Json数据:
记得在客户端添加gson.jar。
核心代码:
服务端:
package com.mfc.ctrl;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.httpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapPing;import org.springframework.web.bind.annotation.ResponseBody;import com.mfc.dao.TblUserDao;import com.mfc.entity.TblUser;/** * 2017年7月6日06:26:40 * 对用户 *** 作的控制器类 * */@Controller@RequestMapPing("tblUserCtrl")public class TblUserCtrl { @Resource(name="tblUserDao") TblUserDao tblUserDao; //添加用户 @RequestMapPing("addUser") @ResponseBody public Object addUser(httpServletRequest request){ String uname=request.getParameter("uname"); String upass=request.getParameter("upass"); float money=float.parsefloat(request.getParameter("money")); System.out.println(uname+"==="+upass+"==="+money); TblUser tblUser=new TblUser(); tblUser.setMoney(money); tblUser.setUname(uname); tblUser.setUpass(upass); tblUserDao.addUser(tblUser); Map<String,Object> map=new HashMap<String,Object>(); map.put("success","success"); return map; } //查看所有用户 @RequestMapPing("getAllUser") @ResponseBody public Object getAllUser(){ List<TblUser> List = tblUserDao.selectAllUser(); Map<String,Object>(); map.put("List",List); return map; } //删除用户 @RequestMapPing("delUser") @ResponseBody public Object delUser(httpServletRequest request){ int uID=Integer.parseInt(request.getParameter("uID")); TblUser tblUser=tblUserDao.getUserByID(uID); tblUserDao.delUser(tblUser); Map<String,"success"); return map; } //修改用户 @RequestMapPing("updateUser") @ResponseBody public Object updateUser(httpServletRequest request){ int uID=Integer.parseInt(request.getParameter("uID")); String uname=request.getParameter("uname"); String upass=request.getParameter("upass"); float money=float.parsefloat(request.getParameter("money")); TblUser tblUser=new TblUser(); tblUser.setMoney(money); tblUser.setUID(uID); tblUser.setUname(uname); tblUser.setUpass(upass); tblUserDao.updateUser(tblUser); Map<String,"success"); return map; }}
客户端:
拼接URL的类:
package com.mfc.urlutils;import java.util.Map;/** * 2017年7月6日06:42:10 * 一些URL需要使用的公用数据及方法 * */public class SomePublicdata { //公用path public static final String path="http://192.168.0.111:8080/MyeclipseService/tblUserCtrl/"; //拼接path public static String fullPath(String pathlast,Map<String,String> map) { StringBuilder builder = new StringBuilder(); String realPath = null; if(map!=null && !map.isEmpty()){ //拼接url的参数部分 for (Map.Entry<String,String> entrty : map.entrySet()) { builder.append(entrty.getKey()).append("="); builder.append(entrty.getValue()).append("&"); } builder.deleteCharat(builder.length()-1); //拼接最后完整的url realPath = SomePublicdata.path+pathlast+"?"+builder; return realPath; } return SomePublicdata.path+pathlast; }}
访问服务器的类:
package com.mfc.urlutils;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStreamReader;import org.apache.http.httpentity;import org.apache.http.httpResponse;import org.apache.http.clIEnt.ClIEntProtocolException;import org.apache.http.clIEnt.httpClIEnt;import org.apache.http.clIEnt.methods.httpGet;import org.apache.http.impl.clIEnt.DefaulthttpClIEnt;import org.apache.http.params.httpconnectionParams;import org.apache.http.params.httpParams;/** * 2017年7月6日06:55:26 * 将客户端数据传送到服务器,并接受服务器返回的数据 * */public class SendDatetoServer { public static String sendToServer(String path){ StringBuilder builder=new StringBuilder(); try { httpClIEnt clIEnt=new DefaulthttpClIEnt(); if(path != null && path.length() > 0){ if(clIEnt != null){ httpParams httpParams=clIEnt.getParams(); if(httpParams != null){ httpconnectionParams.setConnectionTimeout(httpParams,60000); httpconnectionParams.setSoTimeout(httpParams,60000); httpGet get=new httpGet(path); if(get != null){ httpResponse httpResponse=clIEnt.execute(get); if(httpResponse != null){ httpentity entity=httpResponse.getEntity(); if(entity != null){ BufferedReader bufferedReader = new BufferedReader(new inputStreamReader(entity.getContent())); String line = null; while((line = bufferedReader.readline()) != null){ builder.append(String.format("%s\n",line)); } bufferedReader.close(); } } } } } } } catch (ClIEntProtocolException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } return builder.toString(); } }
解析Json数据的类:
package com.mfc.Jsonutils;import java.util.ArrayList;import java.util.List;import org.Json.JsONObject;import com.Google.gson.Gson;import com.Google.gson.JsonArray;import com.Google.gson.JsonElement;import com.Google.gson.JsonParser;import com.mfc.entity.TblUser;/** * 2017年7月6日07:15:32 * 解析Json数据的类 * */public class GetJsonToEntity { //解析单个数据 public static TblUser getTblUser(String JsonString){ Gson gson = new Gson(); TblUser tblUser = gson.fromJson(JsonString,TblUser.class); return tblUser; } //解析List集合 public static List<TblUser> getTblUserList(String gsonString) { List<TblUser> Listusers=GsonUtil.parseJsonArrayWithGson(gsonString,TblUser.class); return Listusers; }}/** * 2017年7月6日15:45:43 * 封装的Json解析工具类,提供泛型参数 * */class GsonUtil{ //将Json数据解析成相应的映射对象 public static <T> T parseJsonWithGson(String JsonData,Class<T> type){ Gson gson=new Gson(); T result = gson.fromJson(JsonData,type); return result; } //将Json数组解析成相应的映射对象列表 public static <T> List<T> parseJsonArrayWithGson(String JsonData,Class<T> type){ List<T> result = new ArrayList<T>(); try { Gson gson = new Gson(); JsONObject JsonObject=new JsONObject(JsonData); String string=JsonObject.getString("List"); JsonArray arry = new JsonParser().parse(string).getAsJsonArray(); for (JsonElement JsonElement : arry) { result.add(gson.fromJson(JsonElement,type)); } } catch (Exception e) { e.printstacktrace(); } return result; }}
调用这些方法的Activity以及实体类省略。
二、使用JsONObject解析Json数据
注意:服务端要添加Json的jar包。
客户端解析Json数据的代码:
package com.mfc.Jsonutils;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.Json.JsONArray;import org.Json.JsONException;import org.Json.JsONObject;import com.mfc.entity.Task;/** * 2017年6月25日21:34:44 * 解析Json的工具类 * 这里面所有方法的key,都是Json一层数据的键,注意传数据时调用本类方法的时候给的key值 * */public class ParseJson { //解析单条数据 public static Task getTask(String key,String Json){ Task task=new Task(); try { JsONObject JsonObject=new JsONObject(Json); JsONObject taskObject=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 (JsONException e) { e.printstacktrace(); } return task; } //解析List集合 public static List<Task> getListTask(String key,String JsonString){ List<Task> List=new ArrayList<Task>(); try { JsONObject JsonObject=new JsONObject(JsonString); //解析Json数组 JsONArray array=JsonObject.getJsONArray(key); for (int i = 0; i < array.length(); i++) { JsONObject JsonObject2=array.getJsONObject(i); Task task=new Task(); task.setTID(JsonObject2.getInt("uID")); task.setContent(JsonObject2.getString("content")); task.setIssuccess(JsonObject2.getInt("issuccess")); task.setTasktime(JsonObject2.getString("tasktime")); task.setTitle(JsonObject2.getString("Title")); task.setUID(JsonObject2.getInt("uID")); List.add(task); } } catch (JsONException e) { e.printstacktrace(); } return List; } /** * 获取String数组数据 * @param key * @param JsonString * @return */ public static List<String> getList(String key,String JsonString){ List<String> List = new ArrayList<String>(); try { JsONObject JsonObject = new JsONObject(JsonString); JsONArray JsonArray = JsonObject.getJsONArray(key); for(int i=0;i<JsonArray.length();i++){ String msg = JsonArray.getString(i); List.add(msg); } } catch (JsONException e) { e.printstacktrace(); } return List; } /** * 获取对象的Map集合数据 * @param key * @param JsonString * @return */ public static List<Map<String,Object>> getListMap(String key,String JsonString){ List<Map<String,Object>> List = new ArrayList<Map<String,Object>>(); try { JsONObject JsonObject = new JsONObject(JsonString); JsONArray JsonArray = JsonObject.getJsONArray(key); for(int i=0;i<JsonArray.length();i++){ JsONObject JsonObject2 = JsonArray.getJsONObject(i); Map<String,Object> map = new HashMap<String,Object>(); Iterator<String> iterator = JsonObject2.keys(); while(iterator.hasNext()){ String Json_key = iterator.next(); Object Json_value = JsonObject2.get(Json_key); if(Json_value==null){ Json_value = ""; } map.put(Json_key,Json_value); } List.add(map); } } catch (JsONException e) { // Todo auto-generated catch block e.printstacktrace(); } return List; } }
客户端接收服务端的数据方法:
package com.mfc.urlutils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.inputStream;import java.net.httpURLConnection;import java.net.MalformedURLException;import java.net.URL;import org.apache.http.entity.StringEntity;import androID.util.Log;public class httpUtils { static String TAG="httpUtils"; /** * 从服务器获取Json数据 * */ public static String getJsonContent(String path){ String JsonString=""; try { URL url=new URL(path); httpURLConnection connection=(httpURLConnection) url.openConnection(); connection.setConnectTimeout(3000); connection.setRequestMethod("GET"); connection.setDoinput(true); int code=connection.getResponseCode(); if(code==200){ inputStream inputStream=connection.getinputStream(); ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); int len=0; byte[] data=new byte[1024]; while ((len=inputStream.read(data))!=-1) { outputStream.write(data,len); } JsonString=new String(outputStream.toByteArray()); Log.i(TAG,JsonString); } } catch (MalformedURLException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } return JsonString; }}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的详解android与服务端交互的两种方式全部内容,希望文章能够帮你解决详解android与服务端交互的两种方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)