Android之Http网络编程(二)

上一篇文章简单的介绍了Android中http的两种通信方式,并且分别用获取百度网页做了实例。但是在实际应用中,更多的是客户端通过请求的参数来实现在服务端的具体操作,并最终返回数据给客户端。因为我们不可能对客户端的每一个需要网络请求的操作都单独的设置一个不变的网络地址。

(因为我是从.net转过来的还没真正学过java web,所以web方面的代码比较简单,大家见谅。)

下面我们来做一个简单的小例子:(简单的用户登录)

这里我们会使用到tomcat,以及Genimotion获取本地IP的方法。对此完全不熟悉的童鞋请看另一篇博客《Android中Tomcat的简单配置和使用》。

首先我们需要完成一个服务器端的代码:

<%@ page contentType="text/html; charset=GBK" language="java"%>
<%
    String param;
    param = request.getParameter("param");
    if (!"".equals(param)||param!=null) {
        if("get".equals(param)){
            out.println("发送GET请求成功");
        }else if("post".equals(param)){
            String content=request.getParameter("content");
            String nickname=request.getParameter("nickname");
            if(content!=null&&nickname!=null){
                nickname=new String(nickname.getBytes("iso-8859-1"),"utf-8");
                content=new String(content.getBytes("iso-8859-1"),"utf-8");
                if(nickname.equals("admin")&&content.equals("123456")){
                    out.println("登陆成功!");
                }
            }
        }
    }
%>

我把这个文件取名为test.jsp,并放在Tomcat的指定的路径下,以便使用Tomcat当作服务器运行test.jsp。
注意:我这里返回的数据是GBK,不是utf-8。

接下来,我们来完成Android客户端的代码:

我们在这里使用HttpClient的使用方式:

/**
     * 表单请求实现登录
     */
    public void testParamsHtppClient() {
        new Thread(new Runnable() {
            int i = 0;
            private String str;

            @Override
            public void run() {
                HttpClient client = new DefaultHttpClient();
                //设置路径
                HttpPost request = new HttpPost("http://192.168.1.100:8080/mytest/test.jsp");
                HttpResponse response;
                //设置表单
                List<NameValuePair> params=new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("param", "post"));//请求方式
                params.add(new BasicNameValuePair("nickname", "admin"));//用户名
                params.add(new BasicNameValuePair("content", "123456"));//密码
                try {
                    request.setEntity(new UrlEncodedFormEntity(params, "utf-8"));//设置编码方式
                    response = client.execute(request);
                    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                        str = EntityUtils.toString(response.getEntity()).trim();
                        
                    }else{
                        str="请求失败";
                    }
                    System.out.println(str);//打印返回结果

                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }).start();
    }

这里我们用的表单的方式和服务器进行参数交互,当然也可用JSON等方式。
打开Tomcat服务器,将上面的方法写入Activity的onCreate()方法中。(创建Activity即执行)

运行结果如下:

OK,一个小小的与服务器有参数交互的小例子就写完成。相信学过java web的童鞋能比我写得更出色!这样,至少与服务器交互这块,我们可以通过自己写一些简单的代码来实现,不再束缚于学校没有专门针对的学生联系的服务器了。

不知不觉就到了凌晨,首先祝福我们伟大的祖国母亲生日快乐!!!

注意:如果要将获取到的网络数据添加到界面上,需要使用到Android的异步消息处理机制。因为对网络的操作属于耗时操作,为了不阻塞主线程我们一般新开一个新的线程来执行网络请求。然而,只有主线程(即UI线程)可以更新界面,因此我们获取的网络数据通过异步消息处理机制从子线程传递到主线程,并最终实现更新UI。

对异步消息处理机制不熟悉的话 ,可以参考另外两篇博文《Android线程与异步消息处理机制》、《Android 在子线程中更新UI》。

DEMO下载:http://download.csdn.net/detail/af74776/7994837

原文地址:https://www.cnblogs.com/scetopcsa/p/4002835.html