HttpURLConnection 用法

Android的网络通信的方式有两种:

  1. Socket
  2. HTTP

而其中,HTTP又包括两种编程方式:

  1. HttpURLConnection
  2. HttpClient

这篇文章介绍的就是,HttpURLConnection

首先,当然是创建HttpURLConnection的对象

URL url = new URL("www.baidu.com");  

HttpURLConnection connection=(HttpURLConnection)url.openConnection(); 

第二步是设置,其中最重要的就是 GET or POST?(GET是从服务器读取数据,POST是提交数据给服务器)

connection.setRequestMethod("GET");

connection.setConnectTimeout(8000);//连接超时

connection.setReadTimeout(8000);//读取超时

接着,就可以从connection中获取数据了

InputStream in = connection.getInputStream();

最后需要关闭连接

connection.disconnect();

例子

要访问网络,所以需要在清单文件里添加权限:

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

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

 

    private Button sendRequest;

    private TextView responseText;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        sendRequest = (Button) findViewById(R.id.send_request);

        responseText = (TextView) findViewById(R.id.response);

        sendRequest.setOnClickListener(this);

    }

 

    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        if (v.getId() == R.id.send_request) {

            sendRequestWithHttpURLConnection();

        }

    }

 

    private void sendRequestWithHttpURLConnection() {

        new Thread(new Runnable() {

 

            @Override

            public void run() {

                // TODO Auto-generated method stub

                HttpURLConnection connection = null;

                try {

                    URL url = new URL("www.baidu.com");

                    connection = (HttpURLConnection) url.openConnection();

                    connection.setConnectTimeout(8000);

                    connection.setReadTimeout(8000);

                    connection.setRequestMethod("GET");

                    String line = null;

                    StringBuilder response = new StringBuilder();

                    InputStream in = connection.getInputStream();

                    BufferedReader reader = new BufferedReader(

                            new InputStreamReader(in));

                    while ((line = reader.readLine()) != null) {

                        response.append(line);

                        Log.e("MainActivity", line);

                    }

                    responseText.setText(response.toString());

                } catch (Exception e) {

                    e.printStackTrace();

                } finally {

                    if (connection != null)

                        connection.disconnect();

                }

            }

        }).start();

    }

}

上面代码的逻辑很简单,就是:点击“发送”按钮,从百度首页获取数据,并显示在文本框里。

但这里有两个问题需要注意:

  1. 写网址,也就是URL时,需要加上协议名,也就是"http://"
  2. 上面的代码如果真的运行,文本框里是不会显示任何内容的,因为子线程中无法对 UI 进行操作

第一个问题容易解决,加上http://就行了。

而第二个问题,解决的办法是:创建一个Message对象,使用Handler把它发送出去,在Handler的方法里来处理这条Message。

修改后的代码

 

public class MainActivity extends Activity implements OnClickListener {

 

    private Button sendRequest;

    private TextView responseText;

 

    public static final int SHOW_RESPONSE = 0;

    private Handler handler = new Handler(){

        public void handleMessage(Message msg){

            switch (msg.what) {

            case SHOW_RESPONSE:

                String response = (String)msg.obj;

                responseText.setText(response);

                break;

 

            default:

                break;

            }

        }

    };

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        sendRequest = (Button) findViewById(R.id.send_request);

        responseText = (TextView) findViewById(R.id.response);

        sendRequest.setOnClickListener(this);

    }

 

    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        if (v.getId() == R.id.send_request) {

            sendRequestWithHttpURLConnection();

        }

    }

 

    private void sendRequestWithHttpURLConnection() {

        new Thread(new Runnable() {

 

            @Override

            public void run() {

                // TODO Auto-generated method stub

                HttpURLConnection connection = null;

                try {

                    URL url = new URL("http://www.baidu.com");

                    connection = (HttpURLConnection) url.openConnection();

                    connection.setConnectTimeout(8000);

                    connection.setReadTimeout(8000);

                    connection.setRequestMethod("GET");

                    String line = null;

                    StringBuilder response = new StringBuilder();

                    InputStream in = connection.getInputStream();

                    BufferedReader reader = new BufferedReader(

                            new InputStreamReader(in));

                    while ((line = reader.readLine()) != null) {

                        response.append(line);

                        Log.e("MainActivity", line);

                    }

                    Message message = new Message();

                    message.what = SHOW_RESPONSE;

                    message.obj = response.toString();

                    handler.sendMessage(message);

                   

                } catch (Exception e) {

                    e.printStackTrace();

                } finally {

                    if (connection != null)

                        connection.disconnect();

                }

            }

        }).start();

    }

}

如果在本机上开了Tomcat服务器,那么URL里的内容就可以是http://192.168.0.100:8080

这样,点击按钮后,就能在文本框里显示本机里的这个URL的内容了。

时间: 2024-11-17 17:19:17

HttpURLConnection 用法的相关文章

HttpURLConnection 用法详解

一.继承关系 1.  java.lang.Object --java.net.URLConnection --java.net.HttpURLConnection 二.URLConnection类 1.URLConnection代表应用程序和 URL 之间的通信链接. 2.作用:代表应用程序和 URL 之间的通信链接: 3. 创建一个到 URL 的连接需要几个步骤: (1)通过在 URL 上调用 openConnection 方法创建连接对象: (2)处理设置参数和一般请求属性: (3)使用 c

HttpURLConnection用法详解

使用HTTP协议访问网络: URL url=new URL("http://www.baidu.com"); HttpURLConnection connection=(HttpURLConnection)url.openConnection(); GET:表示希望从服务器那里获取数据 POST:表示希望提交数据给服务器 connection.setRequestMethod("GET");//设置HTTP请求使用的方法 connection.setConnectT

Android 各大网络请求库的比较及实战,android请求库实战

自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient.

Android进阶笔记01:Android 网络请求库的比较及实战(一)

在实际开发中,有的时候需要频繁的网络请求,而网络请求的方式很多,最常见的也就那么几个.本篇文章对常见的网络请求库进行一个总结. 一.使用HttpUrlConnection: 1. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android2.3以后使用HttpUrlConnection,之前使用HttpCl

各大网络请求框架的比较

原文:http://www.cnblogs.com/changyaohua/p/4992987.html 自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,

Android 网络请求的那些事

自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient.

Android 几种网络请求的区别与联系

HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient. 在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择.而在Android 2.3版本及以后,HttpURLConnecti

HttpURLconnection简单用法

package com.example.day_02_httpurlconnection; import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.ArrayList;import

Android Volley入门到精通:初识Volley的基本用法

1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. 不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码.于是乎,一些Android