Android客户端与服务器进行通信

在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与服务器的通信。

如有不对,敬请指出,谢谢。

猜你喜欢

转载自blog.csdn.net/wangchaohx/article/details/52592462