Android 用HttpURLConnection访问网络的方法

作者:待风 时间:2023-05-18 17:33:01 

一、 HttpURLConnection以GET方式访问网络:


HttpURLConnection connection = null;
try {
URL url = new URL("https://www.xxx.com/");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");//设置访问方式为“GET”
connection.setConnectTimeout(8000);//设置连接服务器超时时间为8秒
connection.setReadTimeout(8000);//设置读取服务器数据超时时间为8秒

if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
 //从服务器获取响应并把响应数据转为字符串打印
 InputStream in = connection.getInputStream();
 BufferedReader reader = new BufferedReader(new InputStreamReader(in));

StringBuilder response = new StringBuilder();
 String line;
 while (null != (line = reader.readLine())) {
   response.append(line);
 }
 Log.d(TAG, response.toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null!= connection) {
  connection.disconnect();
}
}

二、 HttpURLConnection以POST方式访问网络:


HttpURLConnection connection = null;
 try{
  URL url = new URL("https://www.xxx.com/");
  connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("POST");
  connection.setConnectTimeout(8000);
  connection.setReadTimeout(8000);
  connection.setDoOutput(true);// 使用 URL 连接进行输出
  connection.setDoInput(true);// 使用 URL 连接进行输入
  connection.setUseCaches(false);// 忽略缓存

// 建立输出流,并写入数据
  OutputStream outputStream = connection.getOutputStream();
  DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
  dataOutputStream.writeBytes("username=admin&password=888888");
  dataOutputStream.close();

if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
   // 当正确响应时处理数据
   StringBuffer response = new StringBuffer();
   String line;
   BufferedReader responseReader =
     new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
   // 处理响应流,必须与服务器响应流输出的编码一致
   while (null != (line = responseReader.readLine())) {
    response.append(line);
   }
   responseReader.close();
   Log.d(TAG, response.toString());
  }

} catch (Exception e) {
  e.printStackTrace();
 } finally {
  if (null!= connection) {
   connection.disconnect();
  }
 }

注意:

1. HTTP访问是不允许在主线程进行的,否则会报错。因此上面的操作应该在新线程中进行。

2. 一般要用HttpURLConnection.getResponseCode() == 200来判断是否正常响应。为true则正常响应。

3. 在Android 2.2及以下版本,使用的是HttpClient,Android 2.3及以上版本,使用的是HttpURLConnection,而Android5.1之后废弃了HttpClient的相关Api。因此HttpClient用法不再进行研究。

4. 以POST方式提交数据时,每条数据要以键值对的方式提交,各条数据之间以&隔开。比如上面的代码中dataOutputStream.writeBytes(“username=admin&password=888888”);

5. 上面用到了StringBuilder和StringBuffer,没有什么特别用意,只是顺便用下。StringBuilder在单线程下比StringBuffer更高效,但不是线程安全的。

来源:http://blog.csdn.net/fenggering/article/details/78128488

标签:Android,HttpURLConnection,访问,网络
0
投稿

猜你喜欢

  • Spring BeanFactory和FactoryBean区别解析

    2023-09-18 15:38:28
  • C#中ManualResetEvent实现线程的暂停与恢复

    2021-06-20 14:59:24
  • java秒杀之redis限流操作详解

    2022-07-08 09:26:57
  • SpringBoot+MQTT+apollo实现订阅发布功能的示例

    2021-08-30 22:36:46
  • C#如何通过probing指定dll寻找文件夹详解

    2023-07-22 12:59:37
  • C#中Dynamic和Dictionary性能比较

    2022-05-11 12:16:33
  • C#打包应用程序,与.NETFramework介绍

    2022-03-29 15:29:20
  • C# Winform 调用系统接口操作 INI 配置文件的代码

    2023-03-04 11:49:54
  • java集合collection接口与子接口及实现类

    2021-07-02 10:59:04
  • SpringBoot @Cacheable自定义KeyGenerator方式

    2022-12-25 13:23:11
  • SpringBoot整合Shiro的代码详解

    2023-10-30 10:53:31
  • 在SpringBoot中整合使用Netty框架的详细教程

    2023-03-26 23:59:53
  • Java验证码功能的实现方法

    2023-07-05 21:28:21
  • C++实现经典24点纸牌益智游戏

    2023-04-22 01:05:02
  • 灵活使用Android中ActionBar和ViewPager切换页面

    2022-07-08 17:20:09
  • Android绘制圆形百分比加载圈效果

    2023-07-16 17:23:38
  • Android 获取手机信息实例详解

    2021-08-21 00:22:34
  • C#中static void Main(string[] args) 参数示例详解

    2023-10-06 04:44:01
  • Android实现遮罩层(蒙板)效果

    2023-04-26 18:43:03
  • Android实现简单画图画板

    2022-04-02 12:52:56
  • asp之家 软件编程 m.aspxhome.com