详解android与服务端交互的两种方式

详解android与服务端交互的两种方式,第1张

概述做Android开发的程序员必须知道android客户端应该如何与服务端进行交互,这里主要介绍的是使用json数据进行交互。服务端从数据库查出数据并以json字符串的格式或者map集合的格式返回到客户端,客户端进行解析并输出到

做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与服务端交互的两种方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存