• Android客户端与服务器数据交互流程


    一个门户网站的制作的流程:首先,由网页设计师只做网页设计,即画出来网站在浏览器中显示的样子,然后由前端人员编写Html+CSS+JS来实现网站的动态效果,比如说导航栏的下拉显示,然后Ajax的局部信息更新等,然后通过后台程序如JSP,PHP, .NET等语言将数据库中的信息与前台页面相结合,这样,一个站就这样被建好了。而Android客户端,也是有UI设计师,UI前端,程序构成的,同样程序这边的话,最近Html5+CSS3的火热开启,很多公司也需要html5+css3进行Android程序的开发了。呜呜,抢我的饭碗。虽然说哥也是懂html+css的。嘿嘿,这样解释的话,可能大家不清楚,其实木有必要弄清楚网站的建站过程,这里只是给大家普及一下知识,没必要弄清楚。
    基础知识:我们需要知道,Http协议是基于TCP协议的,而TCP协议是一种有连接,可靠的传输协议,如果丢失的话,会重传。所以这样的话,就不会有数据的丢失了。而Http协议有三种方法,Get,Post,Head方法,但是用的多的只有GetPost方法,Get方法是将请求参数放在请求头中,所以请求的参数在URL中可见,而Post方法是将请求参数放在数据部分,所以在URL中不可见,Post相对来说保密,所以在提交重要信息的时候,用的都是HttpPost方法来实现的,比如说,注册账号密码就是使用的HttpPost,因为账号密码需要保密,而上百度搜索安卓巴士,在浏览器的地址栏中就会显示这种URL,其中wd=XXX是经过加密后的安卓巴士,其他的参数也是必须要的请求参数 http://www.baidu.com/s?wd=%E5%AE%89%E5%8D%93%E5%B7%B4%E5%A3%AB&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=11996
     
    而在B/S模式中,B代表浏览器,S代表服务器,在浏览器和服务器的通信之中,因为B/S之间不会一直保持连接,所以才会加入Cookie机制,来辨认所操作的对象。用户浏览网页的操作如下:当用户点击一个连接或者一个按钮的时候,浏览器通过发送一个请求给服务器,然后由服务器接收该请求,然后解析到用户请求的是哪些内容,然后查找到相关资源,再将数据返回给浏览器,由浏览器解析数据,然后显示给用户看到用户所需要看到的页面。所以,AndroidB/S模式差不多,其实也就是发送请求,接收数据,然后解析数据,显示到手机上的过程,没什么太大的区别,谁让咱用的是互联网,用的是TCP/IP协议呢,是吧。要理解是:所有的操作都是向服务器请求数据的过程。
    首先,我们要熟悉Android的HttpGet和HttpPost请求。其中Apache公司已经提供了两个类,叫:HttpGet和HttpPost两个类。两个类的用法不同,不解释贴代码:
    1.        使用HttpGet请求Baidu的主页:
    //使用HttpGet方法,把百度的主页传入
    HttpGet hettpGet = new HttpGet("http://www.baidu.com/");
    //使用默认的HttpClient
    HttpClient hc = new DefaultHttpClient();
    try {
    //执行HttpGet方法,并且获取返回的响应
            HttpResponse response = hc.execute(hettpGet);
    //如果响应码为200则表示获取成功,否则为发生错误
    if (response.getStatusLine().getStatusCode() == 200) {
    //s就是获得的HTML代码
            String s = EntityUtils.toString(response.getEntity());
            System.out.println(s);
    }
    } catch (ClientProtocolException e) 
    {
            e.printStackTrace();
            } catch (IOException e) 
    {                                            e.printStackTrace();
                                    } 
    

       这样就向百度服务器发送了一个HttpGet请求,请求的是百度的搜索首页,服务器返回来都是Html代码,只是浏览器有解析HTML的功能,将HTML代码转换成所显示的页面,所以,打印出来的都是HTML代码。

    //使用HttpPost发送请求
    HttpPost httpPost = new HttpPost(url);        
    //使用NameValuePaira保存请求中所需要传入的参数
    List<NameValuePair> paramas = new ArrayList<NameValuePair>();
            paramas.add(new BasicNameValuePair("a", "a"));
            try {
    
    HttpResponse httpResponse;
    //将NameValuePair放入HttpPost请求体中
    httpPost.setEntity(new UrlEncodedFormEntity(paramas,
                                                            HTTP.UTF_8));
    //执行HttpPost请求
    httpResponse = new DefaultHttpClient().execute(httpPost);
    //如果响应码为200则表示获取成功,否则为发生错误
    if (httpResponse.getStatusLine().getStatusCode() == 200) {
    String s = EntityUtils.toString(httpResponse
                                                    .getEntity());}
                                    } catch (UnsupportedEncodingException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    } catch (ClientProtocolException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    } catch (IOException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    }    
    

      

    这样就发送了一个HttpPost请求了。简单吧。所有的获取数据操作基本上都是在HttpGetHttpPost上拓展开的,然后发送了请求之后呢,服务器就会接受到一个请求了,服务器接收到请求就会通过方法来接收到 Android客户端中发送的参数,并且通过后台程序来解析参数,然后通过数据库查找到所需要的信息,然后通过PHP后台将数据处理成JSON数据格式返回给HttpResponseEntity,然后通过EntitiyUtils.toString方法来将Entity转化成为String对象,然后所得到的String对象呢就是一个JSON数据了。接下来的事情就是JSON数据的解析啦。   
    最后简单说一下动态建站的过程吧:页面分为两种,一种静态的,一种动态的,现在静态的站基本上都没了,全是动态的了,静态页面全是用Html+CSS写的,只能实现简单的从一个页面打开另外一个页面,没有与服务器进行数据交互的过程,只是进行简单的加载静态页面,不会有数据从数据库里面进行差删改查等操作,并且不用使用模板生成器生成文件,再将文件内容返回给浏览器呢而其中呢,而动态建站的过程就是这样的:首先由发送请求给服务器,然后服务器通过数据库查询数据,然后再将查询出来的数据与模板生成器结合,生成一个.php文件,然后浏览器会将php文件解析成为html然后显示在浏览器上显示。
     
    欢迎热爱安卓开发者加入群共同进步。南京群 220818530,武汉群121592153,,杭州群253603803,厦门群253604146,湖南群217494504,大连群253672904
    青岛群 257925319
  • 相关阅读:
    thread.md
    Linux系统编程手册_第6章_进程
    第一章.md
    开始.md
    粘滞位
    端口转发和端口映射
    virtualbox.md
    第6章.md
    JsparentNode、parentElement,childNodes、children 它们有什么区别呢?
    Sql注入防小试
  • 原文地址:https://www.cnblogs.com/feifei1010/p/2670094.html
Copyright © 2020-2023  润新知