手机客户端与服务器端的Json 格式数据交互

 

以手机端的登陆界面为例

客户端与服务器数据交互,主要分为三步,如下图所示(类似于TCP/IP的三次握手)

android手机端

首先手机客户端声明一个异步的AsyncHttpClient对象,通过c.post()或c.get()的方式连接到服务器,

我用的是c.post()的方式,这个方法有几个重载的函数

c.post(url, responseHandler);

c.post(url, params, responseHandler);

url:请求的服务器端的servlet路径,params:要传到服务器短的参数;

responseHandler:处理器,处理服务器返回来的信息(Json 格式的数据用JsonHttpResponseHadler,xml格式的数据用TextHttpResponseHandler,图片用BinaryHttpResponseHandler),这里面要实现它的onSuccess()方法,返回来的数据在onSuccess()方法中获得,在根据实际情况进行相应的操作

 

当输入用户名和密码,点击登录按钮时执行Login()方法,获得输入的用户名和密码传给LoginServlet

 

当服务端返回数据之后(若返回的是则实现onSuccess(JsonObject response)方法,若是数组的话则实现onSuccess(JsonArray respoonse)方法),然后跳转到主界面,执行相应的操作

//手机界面登录时的操作private void login(){AsyncHttpClient c=new AsyncHttpClient();RequestParams params=new RequestParams();params.put("username",edit_username.getText().toString() );  params.put("password", edit_password.getText().toString());params.put("client","android");Log.d("MainActivity.this", "连接 开始。。。。。。。");  c.post("http://"+ConfigIp.ip+":8080/com.traveling.demo/LoginServlet", params, new JsonHttpResponseHandler(){public void onSuccess(JSONObject response) {super.onSuccess(response);try {if("登陆成功".equalsIgnoreCase(response.getString("msg"))){Intent intent=new Intent();intent.setClass(MainActivity.this,GridActivity.class);intent.putExtra("id", response.getString("id"));MainActivity.this.startActivity(intent);Toast.makeText(MainActivity.this, ""+response.getString("msg").toString(), Toast.LENGTH_LONG).show();Log.d("MainActivity",""+response.toString());}else if("登陆失败".equalsIgnoreCase(response.getString("msg"))){Toast.makeText(MainActivity.this,"用户名或密码错误", Toast.LENGTH_LONG).show();}} catch (JSONException e) {e.printStackTrace();}}});}

 

web服务器端

服务器端接到请求取出用户名和密码,将用户名和密码封装到User对象中,将user对象作为参数传到UserUtil类中,然后再调用UserUtil中的loginCheck()方法执行数据库中的查询操作判断用户和密码是否正确的方法(该方法返回一个标志),再将id和要返回的信息封装到map对象中,最后将map以json格式返回(这里如果要返回的是对象的话用JsonObject,数组用JsonArray)

protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {        HashMap map=new HashMap();req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String username=req.getParameter("username");String password=req.getParameter("password");String client=req.getParameter("client");//验证用户输入的用户名是否正确User user=new User();user.setUsername(username);user.setPassword(password);UserUtil uu=new UserUtil(user);map.put("state", "OK");map.put("data", user);if("android".equalsIgnoreCase(client))if(uu.loginCheck()==true){map.put("msg","登陆成功");map.put("id", uu.check());//先返回一个状态码resp.getWriter().print(JSONObject.fromObject(map).toString());}else{map.put("msg","登陆失败");map.put("id", "false");resp.getWriter().print(JSONObject.fromObject(map).toString());}}}

 

 

 

 

 

 

 

更多相关文章

  1. Android(安卓)studio 快捷键汇总
  2. Android(安卓)弹出菜单示例(Android(安卓)sample API22)
  3. Android切近实战(三)
  4. 使用ProGuard遇到“conversion to Dalvik format failed with er
  5. Android——SimpleAdapter的简单使用
  6. android+kotlin开发笔记(一)
  7. Android从源码分析一:Looper,Handler消息机制
  8. android XML文件解析之 SAX解析方法
  9. 结合Android浅谈Builder模式

随机推荐

  1. android get请求数据
  2. android之监听手机来电状态
  3. Linux ubuntu14.04 LTS 配置 android stu
  4. android apk 升级代码
  5. 如何在Mac/Linux上设置android环境变量
  6. Android(安卓)进入后台触发的事件,一般用
  7. android app widget,安卓桌面小工具的使
  8. Java 软引用及在Android中的应用
  9. Android之混淆心得与亲身体验
  10. android从web应用读取xml和json数据实战