本文实例讲述了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
HttpPost post = new HttpPost(url);// 如果传递参数个数比较多的话可以对传递的参数进行封装List
第二步:使用软引用把远程得到的数据缓存到手机,如果服务器有数据更新,重新查询/*** 使用这个需要注意,一切都必须与服务器上的字段一一对应,大小写一致 为了保持一致,所有的实体都必须小写,远程数据库上的字段也得小写** @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
for (JsonElement json : jsonArray) {if (json != null) {t = gson.fromJson(json, clazz);list.add(t);}}}}return list;}public
第三步:使用事例-客户信息查询public class SearchActivity extends CommonActivity implements OnClickListener {private BaseManager mManager;private ListView mListView ;private Button mBtnQuery;private QueryAccountAdapter mAdapter;@Override protected 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);}@Override public 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 sname, String scode, 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, HttpServletResponse response) throws ServletException, 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
第五步:查询数据库@Stateless public 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
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实现与Apache Tomcat服务器数据交互(MySql数据库)详解Android客户端与服务器交互方式Android HttpURLConnection下载网络图片设置系统壁纸Android 用HttpURLConnection访问网络的方法Android开发使用HttpURLConnection进行网络编程详解【附源码下载】Android基于HttpUrlConnection类的文件下载实例代码Android网络技术HttpURLConnection详解Kotlin HttpURLConnection与服务器交互实现方法详解
