在Android开发中,经常使用到与后台进行交互,后台人员给你一个URL,Android使用HttpURLConnection得到后台返回的数据。这些任务是开发中经常遇到的。这里,我们自己搭建一个简易的后台,来实现Android客户端与后台的交互。
首先,后台服务器代码
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("userName");
String password = req.getParameter("password");
resp.setContentType("text/html");
if (username.equals("admin") && password.equals("123456")){
// 与Android客户端交互
resp.getOutputStream().print("login successful");
}else {
// 与Android客户端交互
resp.getWriter().print("login fail");
}
}
}
配置web.xml文件
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.login.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
这里就不多说了。
接下来是Android端的核心代码:
private void getReturnData() {
new Thread(new Runnable() {
@Override
public void run() {
URL url = null;
String result = "";
HttpURLConnection httpURLConnection = null;
InputStreamReader inputStreamReader = null;
try {
url = new URL("http://172.17.131.81:8080/login?userName=admin&password=123456");
httpURLConnection = (HttpURLConnection) url.openConnection();
inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
BufferedReader bf = new BufferedReader(inputStreamReader);
String readLine = null;
while ((readLine = bf.readLine()) != null) {
result += readLine;
}
inputStreamReader.close();
httpURLConnection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
Message message = new Message();
message.what = 0x123;
message.obj = result;
handler.sendMessage(message);
}
}).start();
}
我这里是使用了Handler将获取的返回数据显示在TextView上。
**在这里,要注意**URL的地址要保证正确,不然你肯定不会成功的。
我的URL:"http://172.17.131.81:8080/login?userName=admin&password=123456"
1、172.17.131.81:8080
这里的ip地址是局域网中你的服务器的地址,不能写成127.0.0.1或者localhost,不然会出现未知的错误。
2、http://172.17.131.81:8080/login
这里的/login是在web.xml中配置的,即servlet的<url-pattern>
。 如果前面加入项目名,即http://ip:8080/LoginWeb/login
也会出现错误,错误如下:
最后的userName与password是请求参数,这里使用的get请求方式。
如此一来,就完成了Android与服务器的通信。
如有不对,敬请指出,谢谢。