最近需要實現(xiàn)android與部署在本地tomcat上的java web項目之間進(jìn)行通信的功能伟葫,在這里總結(jié)一下。
首先院促,由于是與本地服務(wù)器通信筏养,所以我是采用android模擬器實現(xiàn)的斧抱。常用的模擬器有夜神,海馬玩等(官方模擬器用著比較卡) 但是夜神無法訪問到本地tomcat,所以我
使用的海馬玩渐溶,本地服務(wù)器的地址是10.0.2.2辉浦。
夜神連接androidstudio:cmd進(jìn)入到Nox\bin下,nox_adb.exe? connect 127.0.0.1:62001
海馬玩連接androidstudio:cmd進(jìn)入Droid4X? 下茎辐,adb connect 127.0.0.1:26944宪郊。 當(dāng)然端口號隨意。
java web服務(wù)端我使用的是springmvc+mybatis+spring拖陆。
思路:
android端的話弛槐,我使用的是HttpUrlConnection與服務(wù)端進(jìn)行通信,傳遞的是json信息依啰。主要代碼如下:
publicvoidpostRequest()?{
try{
jsonHandle=newJsonHandle();
jsonObject.put("username",username);
jsonObject.put("password",password);
data=jsonObject.toString().getBytes();//這是要發(fā)送給服務(wù)端的json信息乎串,里面有用戶名以及密碼。
URL?url=newURL(ip);//ip是后端具體的處理登錄的url,例如http://10.0.2.2:8080/xxx/mvc/login,記得加上http速警。
HttpURLConnection?httpURLConnection?=?(HttpURLConnection)?url.openConnection();
httpURLConnection.setConnectTimeout(3000);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.connect();
OutputStream?outputStream?=?httpURLConnection.getOutputStream();
outputStream.write(data);
outputStream.flush();//發(fā)送data
//讀取服務(wù)端的返回信息叹誉。
InputStream?is=httpURLConnection.getInputStream();
BufferedReader?reader?=newBufferedReader(newInputStreamReader(is));
StringBuilder?sb?=newStringBuilder();
String?line?=null;
try{
while((line?=?reader.readLine())?!=null)?{
sb.append(line?+"/n");
}
}catch(Exception?e)?{
e.printStackTrace();
}finally{
try{
is.close();
}catch(Exception?e)
{e.printStackTrace();
}
}
}catch(Exception?e){
e.printStackTrace();
}
}
服務(wù)端,使用springmvc處理請求闷旧。代碼如下:
@Controller
@RequestMapping(value?="/mvc")
publicclassLoginController?{
@RequestMapping(value?="/login",method=RequestMethod.POST)
publicvoidlogin(HttpServletRequest?req,HttpServletResponse?rep)throwsIOException{
BufferedReader?br?=null;
try{
br?=?req.getReader();//接收信息
}catch(IOException?e1)?{
//?TODO?Auto-generated?catch?block
e1.printStackTrace();
}
String?line?=null;
String?data?="";
while((line?=?br.readLine())?!=null)?{
data?+=?line;
}
try{
rep.getOutputStream().write("信息".getBytes());//發(fā)送信息长豁。
}catch(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
一般傳遞方式都是post.這樣子,就達(dá)到了通信的目的忙灼,再加上一些邏輯代碼匠襟,就能做到登錄檢測等功能啦