安卓向JSP服务端发送请求与接收来自JSP服务端返回的信息(字符串或JSON)并对数据进行解析

      如今,安卓app几乎普及到我们每个人。作为开发者,我们都知道,我们所使用的软件APP,绝大多数都是移动端+WEB服务端,那么怎么让安卓客户端跟web服务端通信,可能对一些刚接触安卓的学习者来说可能是一个难点。下面通过一个简单的例子(服务端以JSP为例,GET请求),让一些刚接触的学习者学习一下怎么让两者建立通信,并发送数据与接收返回的数据。

      可能类似于一些验证的功能,只要需要验证一下是否信息是否匹配,此时,服务端(JSP)只要返回给开发者一个表示正确或者错误的信息,例如登录的时候验证成功返回一个“登录成功”的字符串给客服端,开发者根据返回的消息作下一步的操作。

      先在服务端(JSP)写好,要返回给客服端的内容,以一个简单的登录功能为例:

<body>
  <%
                 String id = request.getParameter("id");//接收从客户端发送过来的账号
		 String rpwd  = request.getParameter("pwd");//接收从客服端发送过来的密码
		// System.out.println(studentid+"\t"+rpwd);
 		 ServerDatabase serverdb = new ServerDatabase();
	     serverdb.connSQL();
		 String check = "select upwd from user where id='"+id+"'";
	     ResultSet resultSet = serverdb.selectSQL(check); 
		 
		 //验证成功为true,不成功为false
         if (resultSet.next()==true){
		     if(rpwd.equals(resultSet.getString("upwd"))){
		         response.getOutputStream().print("登录成功");//账号密码都正确返回的内容
		     }else {
		        response.getOutputStream().print("密码错误");//密码错误返回的内容
		     }
		 } else{
		    response.getOutputStream().print("该账号不存在");//账号不存在返回的内容
		 }  
		 
   %>
  </body>

其中ServerDatabase为自己定义的类,是对数据库一些操作的类,具体的代码就自己写啦,这个就不多说啦。其次就是用安卓客服端发送数据

先创建一个Handle类对数据的一些操作

 

private Handler handler = new Handler(){
		public void handleMessage(Message msg){
			super.handleMessage(msg);
			switch(msg.what){
				case 0:
					String response = (String)msg.obj;//这个是JSP返回来的消息,但是要对其进行解析
					int index = response.indexOf("<body>");
					int index_end = response.indexOf("</body>");
                                        //解析获取关键内容
					String response_str = response.substring(index+"<body>".length(),index_end);
                                       //在这里做一些其它操作如 验证接收到的消息为if(response_str.tirm().equals("登录成功")){
					//登录成功的相关操作如:跳转到其它页面之类的
					}
					break;
				default:
					break;
			}
		}
	};

然后再定义一个类发送来对数据的发送与接收

private void sendRequestWithHttpClient(){
    	new Thread(new Runnable(){
			@Override
			public void run() {
				// TODO Auto-generated method stub
				HttpClient httpClient = new DefaultHttpClient();
				
				HttpGet httpGet = new HttpGet("http://172.16.0.103:7001/driver-admin/user_tool/login_get.jsp?student_id=123456&pwd=123456");
				//172.16.0.103为服务端的Ip,7001为端口号,后面为服务端的路径与发送的数据
				try{
					HttpResponse httpResponse = httpClient.execute(httpGet);
					if(httpResponse.getStatusLine().getStatusCode() == 200){
						HttpEntity entity = httpResponse.getEntity();
						String response = EntityUtils.toString(entity,"utf-8");
						
						Message message = new Message();
						message.what = 0;
						message.obj = response.toString();
						handler.sendMessage(message);
					}
				} catch (Exception e){
					e.printStackTrace();
				}
			}
    	}).start();
    }

这样一收一发,就让安卓与JSP服务端建立起了通信了。下面来说一说返回让服务端返回JSON数据的,跟客服端对JSON数据的解析

    特别注意的事,JSP要将数据封装为JSON数据,首先要先导入JSON的几个依赖JAR包,如图所示:

jar包下载地址:https://download.csdn.net/download/baidu_38345181/10612553

这几个包缺一不可,少了一个都会报错。

在JSP中包装JSON数据,代码跟上面的差不多,我就不全部都贴出来了,就截部分代码出来就好

 Map<String,String> map = new HashMap<String,String>();
           map.put("studentid",studentid);
           map.put("username", username);
           map.put("sname",sname);
           map.put("pid",pid);
           map.put("tel",tel);
           map.put("origo", origo);
           map.put("address",address);

         JSONObject info = JSONObject.fromObject(map);
          response.getOutputStream().println(info.toString());

在安卓客户端里对发送过来的数据进行解析,通过键值去获取相应的内容,关键代码如下

try {
						JSONObject obj = new JSONObject(response);
						JSONObject clarray = obj.getJSONObject("data");
						JSONObject wearray = clarray.getJSONObject("class");
						JSONArray array = wearray.getJSONArray("mon");
						String txt = null;
						for(int i = 0 ; i<array.length();i++){
				            JSONObject c = array.getJSONObject(i);
				            txt = txt + '*' + c.getString("name");
				        }
						textView_response.setText(txt);
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

     以上就是安卓与JSP之间,通过get请求发送数据,与解析来自JSP服务端返回的消息(字符串与JSON),希望对大家有所帮助。

     学生一枚,刚接触安卓开发不久,写得不好或者有写错的,请谅解,欢迎指正交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章