Android开发使用json实现服务器与客户端数据的交互功能示例

Android开发使用json实现服务器与客户端数据的交互功能示例,第1张

概述本文实例讲述了Android开发使用json实现服务器客户端数据的交互功能。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID开发使用Json实现服务器与客户端数据的交互功能。分享给大家供大家参考,具体如下:

第一步:写一个远程查询工具类,使用单例模式

/** * 查询远程服务器的工具 * @author chen.lin * */public class queryUtils {  //private static final String TAG = "CommonUtils";  private static queryUtils instance;  private SharedPreferences sp;  private queryUtils(Context context){    sp = context.getSharedPreferences(Constant.CONfig,Context.MODE_PRIVATE);  }  public static queryUtils getInstance(Context context){    if (instance == null) {      synchronized (queryUtils.class) {        if (instance == null) {          instance = new queryUtils(context);        }      }    }    return instance;  }  /**   * 请求服务器得到返回值   *   * @param keyword   * @return   * @throws Exception   */  public String queryServer(String keyword,String reqType,String servlet) throws Exception {    String returnValue = null;    // 使用Map封装请求参数    Map<String,String> map = new HashMap<String,String>();    map.put("reqType",reqType);    map.put("localiP",sp.getString(Constant.NETIP,""));    if (!TextUtils.isEmpty(keyword)) {      map.put("keyword",keyword);    }    String url = "http://" + sp.getString(Constant.NETURL,"") + "/ymerp/" + servlet;    returnValue = postRequest(url,map);    return returnValue;  }}/*** 请求远程服务器,并封装参数信息* @param url* @param rawParams* @return* @throws Exception*/public static String postRequest(String url,Map<String,String> rawParams) throws Exception {    // 创建httpPost对象。    httpPost post = new httpPost(url);    // 如果传递参数个数比较多的话可以对传递的参数进行封装    List<nameValuePair> params = new ArrayList<nameValuePair>();    for (String key : rawParams.keySet()) {      // 封装请求参数      params.add(new BasicnameValuePair(key,rawParams.get(key)));    }    //Logger.i(TAG,"params------------------->" + params);    // 设置请求参数    post.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));    httpParams httpParameters = new BasichttpParams();    httpconnectionParams.setConnectionTimeout(httpParameters,3000);    httpconnectionParams.setSoTimeout(httpParameters,15000);    DefaulthttpClIEnt httpClIEnt = new DefaulthttpClIEnt(httpParameters);    // 发送POST请求    httpResponse httpResponse = httpClIEnt.execute(post);    // 如果服务器成功地返回响应    String result = null;    if (httpResponse.getStatusline().getStatusCode() == 200) {      // 获取服务器响应字符串      result = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");      Logger.i(TAG,"result-------->" + result);    }    return result;}

第二步:使用软引用把远程得到的数据缓存到手机,如果服务器有数据更新,重新查询

/** * 使用这个需要注意,一切都必须与服务器上的字段一一对应,大小写一致 为了保持一致,所有的实体都必须小写,远程数据库上的字段也得小写 * * @author chen.lin * */@SuppressWarnings({ "unchecked","deprecation" })public class BaseManager {  private static BaseManager instance;  private queryUtils queryUtils;  private SharedPreferences sp;  private Context context;  private BaseManager(Context context) {    this.context = context;    queryUtils = queryUtils.getInstance(context);    sp = context.getSharedPreferences(Constant.CONfig,Context.MODE_PRIVATE);  }  public static BaseManager getInstance(Context context) {    if (instance == null){      synchronized (BaseManager.class) {        if (instance == null) {          instance = new BaseManager(context);        }      }    }    return instance;  }  private static Map<String,List<?>> ListCACHE;//  static {    // 16M,如果不足<16M(模拟器)    // 32M,真机    if (MemoryManager.hasAcailMemory()) {      ListCACHE = new HashMap<String,List<?>>();    } else {      ListCACHE = new SoftMap<String,List<?>>();    }  }  private static Map<String,Object> DOCCACHE;//  static {    // 16M,如果不足<16M(模拟器)    // 32M,真机    if (MemoryManager.hasAcailMemory()) {      DOCCACHE = new HashMap<String,Object>();    } else {      DOCCACHE = new SoftMap<String,Object>();    }  }  public <T> List<T> queryListByCache(Class<T> clazz,String key,String servlet) throws Exception {    List<T> List = null;    // 一旦创建过,重用    // 判断是否创建了――曾经创建过的界面需要存储    if (ListCACHE != null && ListCACHE.containsKey(key)) {      // 创建了,重用      List = (List<T>) ListCACHE.get(key);      if (List == null || List.isEmpty()) {        // 有时候查询 的数据过大,vIEwcache中放置不了那么多数据,就会被垃圾回收站回收,得重新查询远程数据库        List = getListFromServer(clazz,key,reqType,servlet);        ListCACHE.put(key,List);      }    } else {      // 否则,创建      List = getListFromServer(clazz,servlet);      ListCACHE.put(key,List);    }    return List;  }  public <T> List<T> getListFromServer(Class<T> clazz,String keyword,String servlet)      throws Exception {    List<T> List = new ArrayList<T>();    String returnValue = queryUtils.queryServer(keyword,servlet);    if (!TextUtils.isEmpty(returnValue)) {      Gson gson = new Gson();      JsonParser JsonParser = new JsonParser();      JsonArray JsonArray = JsonParser.parse(returnValue).getAsJsonArray();      if (JsonArray != null) {        T t = null;        // 循环记录数(多少条)        for (JsonElement Json : JsonArray) {          if (Json != null) {            t = gson.fromJson(Json,clazz);            List.add(t);          }        }      }    }    return List;  }  public <T> T queryDocByCache(Class<T> clazz,String servlet) throws Exception {    T t = null;    // 一旦创建过,重用    // 判断是否创建了――曾经创建过的界面需要存储    if (DOCCACHE != null && DOCCACHE.containsKey(key)) {      // 创建了,重用      t = (T) DOCCACHE.get(key);      if (t == null) {        // 有时候查询 的数据过大,vIEwcache中放置不了那么多数据,就会被垃圾回收站回收,得重新查询远程数据库        t = getDocFromServer(clazz,servlet);        DOCCACHE.put(key,t);      }    } else {      // 否则,创建      t = getDocFromServer(clazz,servlet);      DOCCACHE.put(key,t);    }    return t;  }  public <T> T getDocFromServer(Class<T> clazz,String servlet) throws Exception {    String returnValue = queryUtils.queryServer(keyword,servlet);    if (!TextUtils.isEmpty(returnValue)) {      Gson gson = new Gson();      T t = gson.fromJson(returnValue,clazz);      return t;    }    return null;  }  /**   * 查询判断客户是否已经添加   *   * @param keyword   * @param dialog   * @return   * @throws Exception   */  public boolean isAccountExist(String keyword) throws Exception {    String returnValue = queryUtils.queryServer(keyword,"queryaccountExist","AccountdocumentServlet");    if (!TextUtils.isEmpty(returnValue) && "true".equals(returnValue.trim())) {      return true;    }    return false;  }  /**   * 更新服务器上的数据   * @param context   * @param params   * @param servlet   * @return   * @throws Exception   */  public voID updateServer(final RequestParams params,String servlet) {    AsynchttpClIEnt clIEnt = new AsynchttpClIEnt();    String url = "http://" + sp.getString(Constant.NETURL,"") + "/ymerp/" + servlet;    clIEnt.post(url,params,new AsynchttpResponseHandler() {      @OverrIDe      public voID onSuccess(int statusCode,header[] headers,byte[] responseBody) {        try {          String returnValue = new String(responseBody);          JsONObject JsonObject = new JsONObject(returnValue);          if ("success".equalsIgnoreCase(JsonObject.getString("result"))) {            if (params.has("sendread")) {              Logger.i("update","更新成功!");            }else {              Toast.makeText(context,"更新成功!",Toast.LENGTH_SHORT).show();            }          }else {            if (params.has("sendread")) {              Logger.i("update","更新失败!");            }else {              Toast.makeText(context,"更新失败!",Toast.LENGTH_SHORT).show();            }          }        } catch (JsONException e) {          e.printstacktrace();          Toast.makeText(context,"Json格式数据有误!",Toast.LENGTH_SHORT).show();        }      }      @OverrIDe      public voID onFailure(int statusCode,byte[] responseBody,Throwable error) {        Toast.makeText(context,"网络错误!错误信息:" + error.getMessage(),Toast.LENGTH_SHORT).show();      }    });  }}

第三步:使用事例-客户信息查询

public class SearchActivity extends CommonActivity implements OnClickListener {private BaseManager mManager;private ListVIEw mListVIEw ;private button mBtnquery;private queryAccountAdapter mAdapter;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentVIEw(R.layout.search);// 初始化组件initVIEw();// 进出动画效果overrIDePendingTransition(R.anim.push_bottom_in,R.anim.push_bottom_out);}}private voID initVIEw() {mManager = BaseManager.getInstance(this);mListVIEw = (ListVIEw) findVIEwByID(R.ID.lv_search);mbutton = (button)findVIEwByID(R.ID.bt_query);mbutton.setonClickListener(this);mAdapter = new queryAccountAdapter(this,mAccounts);mListVIEw.setAdapter(mAdapter);}@OverrIDepublic voID onClick(VIEw v) {if(v == mBtnquery){mAccounts = mManager.getListFromServer(Account.class,query,"queryAccountByKey","queryServlet");}}}

客户实体类:

/** * 客户信息 * * @author chen.lin * @createtime 20150217 */public class Account implements Serializable {  /**   *   */  private static final long serialVersionUID = 1L;  private String ID;  private String sname;// 客户名称  private String scode;// 客户编码  private String contact;// 联系人  private String IDcontact;// 联系人ID  private String emtype;// 客户分类  private String xsly;// 客户来源  private String xsbh;// 线索编号  private String xs;// 线索名称  private String IDlead;// 线索ID  private String leadscode;  private String IDzh;// 相关展会  private String srcpath;// 来源途径  private String emindustry;// 行业  private String IDarea; // 行政区域  private String saddress;// 客户地址  private String shdz;// 收货地址  private String cclx;// 乘车路线  private String spostcode;// 邮编  private String stel;// 手机  private String telcode;// 电话号码  private String sfax;// 传真  private String semail;// 邮箱  private String swebsite;// 站点主页  private String IDdep;// 负责人部门  private String IDowner;// 负责人  private String created;// 新建时间  private String createdby;// 新建人  private String updated;// 编辑时间  private String updatedby;// 编辑人  public String getIDcontact() {    return IDcontact;  }  public voID setIDcontact(String IDcontact) {    this.IDcontact = IDcontact;  }  public String getContact() {    return contact;  }  public voID setContact(String contact) {    this.contact = contact;  }  public String getIDlead() {    return IDlead;  }  public voID setIDlead(String IDlead) {    this.IDlead = IDlead;  }  public String getLeadscode() {    return leadscode;  }  public voID setLeadscode(String leadscode) {    this.leadscode = leadscode;  }  public String getTelcode() {    return telcode;  }  public voID setTelcode(String telcode) {    this.telcode = telcode;  }  public String getID() {    return ID;  }  public voID setID(String ID) {    this.ID = ID;  }  public String getSname() {    return sname;  }  public voID setSname(String sname) {    this.sname = sname;  }  public String getScode() {    return scode;  }  public voID setScode(String scode) {    this.scode = scode;  }  public String getEmtype() {    return emtype;  }  public voID setEmtype(String emtype) {    this.emtype = emtype;  }  public String getXsly() {    return xsly;  }  public voID setXsly(String xsly) {    this.xsly = xsly;  }  public String getXsbh() {    return xsbh;  }  public voID setXsbh(String xsbh) {    this.xsbh = xsbh;  }  public String getXs() {    return xs;  }  public voID setXs(String xs) {    this.xs = xs;  }  public String getIDzh() {    return IDzh;  }  public voID setIDzh(String IDzh) {    this.IDzh = IDzh;  }  public String getSrcpath() {    return srcpath;  }  public voID setSrcpath(String srcpath) {    this.srcpath = srcpath;  }  public String getEmindustry() {    return emindustry;  }  public voID setEmindustry(String emindustry) {    this.emindustry = emindustry;  }  public String getIDarea() {    return IDarea;  }  public voID setIDarea(String IDarea) {    this.IDarea = IDarea;  }  public String getSaddress() {    return saddress;  }  public voID setSaddress(String saddress) {    this.saddress = saddress;  }  public String getShdz() {    return shdz;  }  public voID setShdz(String shdz) {    this.shdz = shdz;  }  public String getcclx() {    return cclx;  }  public voID setcclx(String cclx) {    this.cclx = cclx;  }  public String getSpostcode() {    return spostcode;  }  public voID setSpostcode(String spostcode) {    this.spostcode = spostcode;  }  public String getStel() {    return stel;  }  public voID setStel(String stel) {    this.stel = stel;  }  public String getSfax() {    return sfax;  }  public voID setSfax(String sfax) {    this.sfax = sfax;  }  public String getSemail() {    return semail;  }  public voID setSemail(String semail) {    this.semail = semail;  }  public String getSwebsite() {    return swebsite;  }  public voID setSwebsite(String swebsite) {    this.swebsite = swebsite;  }  public String getIDdep() {    return IDdep;  }  public voID setIDdep(String IDdep) {    this.IDdep = IDdep;  }  public String getIDowner() {    return IDowner;  }  public voID setIDowner(String IDowner) {    this.IDowner = IDowner;  }  public String getCreated() {    return created;  }  public voID setCreated(String created) {    this.created = created;  }  public String getCreatedby() {    return createdby;  }  public voID setCreatedby(String createdby) {    this.createdby = createdby;  }  public String getUpdated() {    return updated;  }  public voID setUpdated(String updated) {    this.updated = updated;  }  public String getUpdatedby() {    return updatedby;  }  public voID setUpdatedby(String updatedby) {    this.updatedby = updatedby;  }  public Account(String ID,String sname,String scode,String IDowner) {    this.ID = ID;    this.sname = sname;    this.scode = scode;    this.IDowner = IDowner;  }  public Account(String ID,String emtype,String xsly,String xsbh,String xs,String IDzh,String srcpath,String emindustry,String IDarea,String saddress,String shdz,String cclx,String spostcode,String stel,String sfax,String semail,String swebsite,String IDdep,String IDowner,String created,String createdby,String updated,String updatedby) {    this.ID = ID;    this.sname = sname;    this.scode = scode;    this.emtype = emtype;    this.xsly = xsly;    this.xsbh = xsbh;    this.xs = xs;    this.IDzh = IDzh;    this.srcpath = srcpath;    this.emindustry = emindustry;    this.IDarea = IDarea;    this.saddress = saddress;    this.shdz = shdz;    this.cclx = cclx;    this.spostcode = spostcode;    this.stel = stel;    this.sfax = sfax;    this.semail = semail;    this.swebsite = swebsite;    this.IDdep = IDdep;    this.IDowner = IDowner;    this.created = created;    this.createdby = createdby;    this.updated = updated;    this.updatedby = updatedby;  }  public Account() {    super();  }}

第四步:服务器端 queryAccountByKey就是从客户端传过来的值

/** * * @author chen.lin */public class queryServlet extends httpServlet {  @OverrIDe  protected voID doGet(httpServletRequest request,httpServletResponse response)      throws servletexception,IOException {    processRequest(request,response);  }  @OverrIDe  protected voID doPost(httpServletRequest request,IOException {    response.setContentType("text/HTML;charset=utf-8");    response.setCharacterEnCoding("UTF-8");    request.setCharacterEnCoding("UTF-8");    PrintWriter out = response.getWriter();    String reqType = request.getParameter("reqType");    String localiP = request.getParameter("localiP");    EJBClIEntLocal.setServerip(localiP);    /**     * 根据关键字查询服务单     */    if (reqType != null && "queryAccountByKey".equalsIgnoreCase(reqType)) {      // 根据查询关键字查找对应用户列表      String keyword = request.getParameter("keyword");      System.out.println("keyword ----------------------:" + keyword);      try {        List<JsONObject> List = EJBClIEntLocal.getMetaCRMIntegratedSessionBeanLocal().queryAccountByKey(keyword);        System.out.println(" queryAccountByKey List:" + List);        if (List != null) {          JsONArray Json = JsONArray.fromObject(List);          // 输出响应          out.println(Json.toString());          out.flush();        }      } catch (Exception ex) {        System.out.println("queryAccountByKey error:" + ex.getMessage());      }    }  }  @OverrIDe  public String getServletInfo() {    return "Short description";  }}

第五步:查询数据库

@Statelesspublic class MetaCRMIntegratedSessionBean implements MetaCRMIntegratedSessionBeanRemote,MetaCRMIntegratedSessionBeanLocal { @Resource  SessionContext ctx;  @PersistenceContext(unitname = "Meta_crm_ejbPU")  private EntityManager em;  private DBMsqlServer2005 dbm = null;  private Statement statement = null;  private PreparedStatement pStatement = null;  SimpleDateFormat yyyymmdd = new SimpleDateFormat("yyyy-MM-dd");  @AroundInvoke  public Object log(InvocationContext ctx)      throws Exception {    String classname = ctx.getTarget().getClass().getname();    String mothodname = ctx.getmethod().getname();    String target = classname + "." + mothodname + "()";    System.out.println("开始调用 " + target + "方法");    long start = System.currentTimeMillis();    try {      Object localObject1 = ctx.proceed();      long time;      return localObject1;    } catch (Exception e) {      return null;    } finally {      long time = System.currentTimeMillis() - start;      System.out.print(target + "方法执行完毕用时 " + time + " ms");    }  }  /**   * 查询客户信息   * @param keyword   * @return   */  public List<JsONObject> queryAccountByKey(String keyword) {    List<JsONObject> List = new ArrayList<JsONObject>();    String sql = "select acc.ID,acc.sname,acc.scode,"        + " con.sname as contact,emp1.sname as createdby,acc.created,acc.saddress,con.ID "        + " from account acc "        + " left join org_employee emp1 on emp1.ID = acc.createdby "//申请人名称        + " left join contact con on acc.ID=con.IDaccount "//联系人        + " where 1=1 ";    if (keyword != null) {      System.out.println("keyword----------------------->" + keyword);      sql += " and acc.sname like '%" + keyword + "%'";      sql += " or emp1.sname like '%" + keyword + "%'";    }    sql += " order by acc.created desc";    System.out.println("sql----------------------->" + sql);    Connection conn = getConn();    ResultSet rs = null;    Statement st = null;    try {      st = conn.createStatement();      rs = st.executequery(sql);      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");      while (rs.next()) {        JsONObject JsonObject = new JsONObject();        JsonObject.put("ID",rs.getobject(1) != null ? rs.getobject(1) : "");        JsonObject.put("sname",rs.getobject(2) != null ? rs.getobject(2) : "");        JsonObject.put("scode",rs.getobject(3) != null ? rs.getobject(3) : "");        JsonObject.put("contact",rs.getobject(4) != null ? rs.getobject(4) : "");        JsonObject.put("createdby",rs.getobject(5) != null ? rs.getobject(5) : "");        setTime(rs,sdf,JsonObject,"created",6);        JsonObject.put("saddress",rs.getobject(7) != null ? rs.getobject(7) : "");        JsonObject.put("IDcontact",rs.getobject(8) != null ? rs.getobject(8) : "");        List.add(JsonObject);      }    } catch (sqlException ex) {      ex.printstacktrace();    } finally {      dbm.closeConn();    }    return List;  }}

PS:这里再为大家推荐几款比较实用的Json在线工具供大家参考使用:

在线JsON代码检验、检验、美化、格式化工具:
http://tools.jb51.net/code/json

JsON在线格式化工具:
http://tools.jb51.net/code/jsonformat

在线XML/JsON互相转换工具:
http://tools.jb51.net/code/xmljson

Json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.jb51.net/code/jsoncodeformat

C语言风格/HTML/CSS/Json代码格式化美化工具:
http://tools.jb51.net/code/ccode_html_css_json

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android *** 作json格式数据技巧总结》、《Android数据库 *** 作技巧总结》、《Android编程之activity *** 作技巧总结》、《Android文件 *** 作技巧汇总》、《Android开发入门与进阶教程》、《Android资源 *** 作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android开发使用json实现服务器与客户端数据的交互功能示例全部内容,希望文章能够帮你解决Android开发使用json实现服务器与客户端数据的交互功能示例所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1143949.html

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

发表评论

登录后才能评论

评论列表(0条)

保存