安卓向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),希望對大家有所幫助。

     學生一枚,剛接觸安卓開發不久,寫得不好或者有寫錯的,請諒解,歡迎指正交流。

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