zoukankan      html  css  js  c++  java
  • android网络操作使用汇总(http)

    Android是作为智能手机的操作系统,我们开发的应用,大多数也都须要连接网络,通过网络发送数据、获取数据,因此作为一个应用开发人员必须熟悉怎么进行网络訪问与连接。

    通常android中进行网络连接通常是使用scoket或者http,http是最多的情况。这里,我来总结下。怎么进行http网络訪问操作。

    android是採用java语言进行开发的,android的包中包括java的URLConnection和apache 的httpclient,因此我们能够使用这两个工具进行网络连接和操作。同一时候。为了控制是否同意程序连接网络,我们开发应用时,须要在Manifest文件里配置申请网络连接的权限,代码例如以下。

    <uses-permission android:name="android.permission.INTERNET"/>

    使用URLConnection连接网络

    URLConnection为java.net包中提供的网络訪问。支持http,https,ftp等。进行http连接时。使用HttpURLConnection就可以。演示样例代码例如以下:

    URL url = new URL("http://www.android.com/");
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        readStream(in);   //该方法是我们自己写的,从流中取数据保存到本地。实现从网络获取数据。

    finally { urlConnection.disconnect(); }

    向server提交数据时,须要採用POST传输

    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        urlConnection.setDoOutput(true);    //设置能够上传数据
        urlConnection.setChunkedStreamingMode(0);
    
        OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
        writeStream(out);   //该方法时我们自己写的。向输出流中写数据,实现数据上传。
    
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        readStream(in);
    finally {
        urlConnection.disconnect();
    }

    很多其它用法和函数请查看:http://developer.android.com/reference/java/net/HttpURLConnection.html

    同一时候HttpsURLConnection的用法请查看:http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html

    使用HttpClient

    这个呢,我们也能够使用AndroidHttpClient页能够使用apache默认的DeafultHttpClient,两者之间只常见Client不同,其它都一样

    创建AndroidHttpClient

    AndroidHttpClient httpClient = AndroidHttpClient.newInstance("user-agent");

    创建DefaultHttpClient

    HttpClient client = new DefaultHttpClient();

    GET请求

    HttpGet getRequest = new HttpGet("http://blog.isming.me");
    try {  
        HttpResponse response = httpClient.execute(getMethod); //发起GET请求  
    
        Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码  
        Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//获取server响应内容  
    } catch (ClientProtocolException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }

    发起POST请求:

    //先将要传的数据放入List  
    params = new LinkedList<BasicNameValuePair>();  
    params.add(new BasicNameValuePair("param1", "Post方法"));  
    params.add(new BasicNameValuePair("param2", "第二个參数"));  
    
    try {  
        HttpPost postMethod = new HttpPost(baseUrl);  
        postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //将參数填入POST Entity中  
    
        HttpResponse response = httpClient.execute(postMethod); //运行POST方法  
        Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码  
        Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //获取响应内容  
    
    } 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();  
    }

    说明

    从上面看到,使用HttpClient更加方便,明了。

    只是Android官方给我们的文档说明是建议android2.2及下面版本号建议使用HttpClient,android2.3及以上版本号建议使用HttpURLConnection。

    原因是HttpURLConnection时一个轻量级的Httpclient,提供的API比較简单,方便扩展,可是在2.2及曾经版本号中,这个API存在一些bug。在2.3的版本号中,给改动了。

    而HttpClient尽管稳定,bug少,可是其提供的API非常多,进行升级和扩展不方便,android团队在提升和优化其方面的积极性不高。

    因此,在Android2.2版本号曾经。使用HttpClient时最好的选择。
    Android2.3版本号及以后,使用HttpURLConnection时最佳选择。

    框架

    网络连接是耗时的操作。通常我们不会将其放在UI线程操作。会编写异步线程,将其放在后台线程运行(异步线程操作看这里)。

    而网上有一些线程的网络操作框架,能够降低我们的工作量,同一时候我们自己写的好,可能非常多异常处理之类的。没有其向的更加全面。

    有轻量的android-async-http
    谷歌官方的volley
    Square提供的Retrofit

    这个能够依据自己项目的须要选择不同的框架,有空我来写写volley的使用(PS:网上已经有用法了。自己百度去),另外两个我的连接中已经有用法了。

    ok,完毕!


    写的东西不少。可是介绍的不够具体。

    假设不清楚的。欢迎与我交流

    原文地址:http://blog.isming.me/blog/2014/05/11/use-network-in-android/,欢迎转载,转载请注明出处!

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Python数据分析的几种绘图方式——数据可视化(附源码)
    Python GUI项目实战:主窗体的界面设计与实现
    Python Scrapy框架:数据爬取全流程
    python来爬取煎蛋网随手拍小姐姐图片
    有意思的逻辑小练习:函数做参数进行传递
    python值*args和**kwargs的总结思考
    数据类型的基础知识补充,字典的并交集、空集合、可作为字典元组的元素、删除字典中的元素
    python里面为什么shell和保存文件运行结果不一样的相关思考(内存相关)
    代码:购物车(待修改)
    python里面为什么shell和保存文件运行结果不一样?
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4794909.html
Copyright © 2011-2022 走看看