android客户端与javaweb服务端通信——登录小demo的启示

前两天讨论了javaweb项目连接mysql数据库的注意事项,是因为刚刚租了一台ecs云服务器,在上面搭载mysql要比Oracle方便很多,今天我们来探讨一下android端与服务端通信的方式方法,更多的是注意事项。

先说服务端,如果查询成功,就返回一个由对象转换而成的json

JsonTools jt =new JsonTools();//jsontools的功能是写json;
jt.writeJson(users, response);//users是返回的对象,作为response返回,本句话的作用类似于request.setAttribute(arg0, arg1);
注:服务端会在json开头加上字符:"\ufeff",将导致安卓版本为2.x的客户端无法解析json,谷歌官方已在4.0以后的版本解决该问题。

然后是客户端,因为要使用post方式传参,所以使用HttpClient会方便很多。

URI uri=new URI(params[0]);
HttpClient client=new DefaultHttpClient();
HttpPost httppost=new HttpPost(uri);
List<NameValuePair> para=new ArrayList<NameValuePair>();
para.add(new BasicNameValuePair("lname", name));//待验证的帐号
para.add(new BasicNameValuePair("lpass", pass));//密码
UrlEncodedFormEntity formEntity=new UrlEncodedFormEntity(para,HTTP.UTF_8);//最后的HTTP.UTF-8一定要写,否则String类型的数据传到服务端,就会变成"??"乱码
httppost.setEntity(formEntity);
HttpResponse response=client.execute(httppost);
				
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){//验证服务端传回来的状态码,200为正常
	HttpEntity entity=response.getEntity();
	InputStream in=entity.getContent();
					
	u=parseJSON(in);//将json解析为Users对象,将在下面详解
					
	in.close();//关闭流
}
下面我们来探讨一下客户端解析服务端发来的json,一般来说,平时我们解析服务端传来的大量json数据的时候,会用到JsonArray类作为游标,然后遍历JsonArray以取得每个对象,
但是对于登录来说,只会返回一个对象,所以不需要遍历,直接使用JsonObject类对对象进行赋值,代码如下:
<pre name="code" class="java">private Users parseJSON(InputStream inStream) throws Exception{
		Users u=null;
		
		byte[] data=StreamTool.read(inStream);
		
		String json = new String(data);
		
		try {
			//JSONArray array=new JSONArray(json);//注释掉是因为登录只会返回一个对象的json,不需要遍历
			
			//for(int i=0;i<array.length();i++){//注释掉是因为登录只会返回一个对象的json,不需要遍历
				JSONObject jsonObject = new JSONObject(json);
				
				u=new Users();
				u.setId(jsonObject.getInt("id"));
				u.setLname(jsonObject.getString("lname"));
				u.setLpass(jsonObject.getString("lpass"));
				u.setAge(jsonObject.getInt("age"));
				Log.i("setting", u.getId()+u.getLname()+u.getLpass()+"");
			//}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return u;
	} 

至此,客户端已经可以成功解析json了!





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