一起Talk Android吧(第三百三十四回: Android中的HTTP请求一)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百三十四回: Android中的HTTP请求一)相关的知识,希望对你有一定的参考价值。

各位看官们,大家好,上一回中咱们说的是android中HTTP接口的例子,这一回中咱们说的例子是Android中的HTTP请求。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,上一章回中我们介绍了Android中HTTP的三种接口,其中第一种接口(Apach接口)已经从SDK中删除,因此我们不再介绍了,我们在本章回中将介绍第二种接口:Java中的接口。

GET请求步骤

我们将重点介绍如何通过此接口从网络上获取数据。获取数据的方式有两种:GET和POST,这两种方式对应于我们在HTPP协议中介绍的GET和POST请求。本章回中先介绍如何使用GET请求从网站区获取数据,下面是具体的操作步骤:

  • 1.使用URL创建一个URL对象,这里的URL通俗点讲就是我们上网时使用的网址;
  • 2.使用URL对象的openConnection()方法获取HttpURLConnection对象;
  • 3.使用HttpURLConnection对象的setRequestMethod()方法设定请求类型为GET;
  • 4.使用HttpURLConnection对象的相关方法设定超时等参数;
  • 5.使用HttpURLConnection对象的getInputStream()方法获取输入流;
  • 6.在输入流中读取网站返回的数据,这些数据就是我们向URL所指网站发出GET请求后,网站响应的数据;
  • 7.关闭输入流并且使用HttpURLConnection对象的disconnect()方法断开网络连接;

看官们,除了需要掌握这些步骤外,还有以下注意事项:

  • 1.与HttpURLConnection相关的操作需要处理异常;
  • 2.获取输入流需要在子线程中进行,Android不允许在主线程中做此操作;
  • 3.网络操作容易发生错误,需要使用HttpURLConnection对象的getResponseCode()获取响应码,响应码为200时表示获取数据成功;
  • 4.获取数据时打开的各种流都需要关闭,最后还需要断开网络连接,否则会引起内存泄漏;

GET请求示例代码

下面是程序的主要代码,请大家参考:

private static final String HTTP_URL = "https://www.baidu.com/";

private void initHttp() 
        //注意:new URL和openConnection都需要处理异常,为了方便把它们统一放到一个try/catch中
        try 
            mURL = new URL(HTTP_URL);
            mHttpURLConnection = (HttpURLConnection)mURL.openConnection();
            if(mHttpURLConnection != null) 
                mHttpURLConnection.setRequestMethod("GET");
                mHttpURLConnection.setConnectTimeout(5*1000);
                mHttpURLConnection.setReadTimeout(3*1000);
            
        catch (Exception e) 
            Log.d(TAG, "initHttp: Exception:"+e.toString());
        


private void httpGetRequest() 
    if(mHttpURLConnection == null)
        return;

    try 
        if(200 == mHttpURLConnection.getResponseCode()) 
            mInputStream = mHttpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(mInputStream));
            StringBuilder stringBuilder = new StringBuilder();
            String tempStr = bufferedReader.readLine();
            while (tempStr != null) 
                stringBuilder.append(tempStr);
                tempStr = bufferedReader.readLine();
            

            bufferedReader.close();
            bufferedReader = null;
            mStrData = stringBuilder.toString();
            Log.d(TAG, "httpGetRequest:  read Data = "+mStrData);
        
    catch (Exception e) 
        Log.d(TAG, "httpGetRequest: get Data Exception: "+e.toString());
    


//创建一个button,并且在点击button时启动线程来获取数据
private Button btGet = (Button) findViewById(R.id.id_http_bt_get);

btGet.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        //注意:android中不能在主线程中获取数据
        new Thread(new Runnable() 
            @Override
            public void run() 
                httpGetRequest();
            
        ).start();
    
);

//关闭流并且断开网络连接
private void releaseConnection() 
    if(mInputStream != null) 
        try 
            mInputStream.close();
            mInputStream = null;
        catch (Exception e) 
            Log.d(TAG, "releaseConnection: close inputStream "+e.toString());
        
    

    if(mHttpURLConnection != null) 
        mHttpURLConnection.disconnect();
        mHttpURLConnection = null;
    

上面的程序中我们向百度网站发起HTTP的GET请求,然后从百度网站的返回结果中获取数据,我们没有对数据进行处理,而是将所有数据全部打印出来。上面的程序只有主要功能的代码,其它代码省略了,此外,页面布局中只有一个Button,与布局相关的代码大家可以自已补充,我们在这里就不列出了。建议大家自己动手运行程序,通过程序的运行结果查看网站对HTTP请求的响应。

看官们,关于Android中HTTP请求的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百三十四回: Android中的HTTP请求一)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第三百三十六回: Android中的volley一)

一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)

一起Talk Android吧(第三百三十九回: Android中的OkHttp二)

一起Talk Android吧(第三百四十四回: JSON概述)

一起Talk Android吧(第三百一十四回:ImageView常用属性三)

一起Talk Android吧(第三百三十回:Android中网络通信之UPD通信演示)