《第一行代码》第二版 学习总结22 HttpURLConnection基本使用

使用HttpURLConnection访问网络--android 第一行代码 在以前,Android发送HTTP请求一般有两种方式,HttpURLConnection和HttpClient。但是由于后者使用起来过于麻烦(API数量过多,扩展困难等),然后在Android6.0系统中,HttpClient功能完全被移除。 HttpURLConnection使用方法比较简单,步骤如下: 如果使用HttpURLConnection当然少不了先获取他的实例了。 实例获取成功之... 阅读详情

      最近利用下班时间,找了看什么书比较适合初学android的朋友,很多人推荐了这本书,于是就买了一本,感觉看书,思考,动手,再思考和总结这样过程还是很有必要的,于是就打算把自己学习的东西简单的总结一下;方便自己以后查找,也有利于学习的巩固。在这里首先要感谢一下书籍的作者——郭霖前辈。

       Android App如果没有网络的支持,就会显得非常的单薄,本地的资源相较于互联网上的丰富世界差太远了。现在还有很多数据处理都是放在云端处理,本地只负责提供数据和接受数据,说到这里,又想起来研究生时期老师让我们研究的课题了,就是均衡本地与云端数据处理。想想还是蛮怀恋的。好了,不多说了;关于Android网络这一块,我也会就和书本给出以下几块内容------WebView基本使用,HttpURLConnection基本使用,OkHttp基本使用,XML文件两种解析方式(Pull和Sax),JSON解析相关以及最后的综合示例代码。本文示例代码连接

1,HttpURLConnecction简介

      从它的名字就可以很清晰的看出,它是建立Http通讯的API,之前还有一个HttpClient,不过现在基本上被弃用了。其实在使用WebView的时候,它也是对网络访问的过程进行了封装(发送请求,接受响应,解析数据等操作);下面就来看看通过手动完成这一系列操作该怎么实现。

2,示例代码

  MainAcctivity.java代码

package com.hfut.operationhttpconnection;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    EditText url;
    TextView webContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUI();
    }

    private void initUI() {
        url=findViewById(R.id.web_url);
        webContent=findViewById(R.id.display_webContent);
    }


    public void querySourceCode(View view){
        new Thread(new Runnable() {
            @Override
            public void run() {
                BufferedReader reader=null;
                HttpURLConnection connection=null;
                try {
                    URL tempUrl = new URL(url.getText().toString());
                    try {
                         connection= (HttpURLConnection) tempUrl.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(5000);
                        int backCode=connection.getResponseCode();
                        System.out.println("backCode:"+backCode);
                        InputStream in = connection.getInputStream();
                        reader=new BufferedReader(new InputStreamReader(in));
                        if(backCode==200) {
                            String tempLine;
                            StringBuilder stringBuilder=new StringBuilder();
                            while((tempLine=reader.readLine())!=null){
                                stringBuilder.append(tempLine);
                            }
                            //Android不允许在子线程中修改UI
                            //webContent.setText(stringBuilder.toString());
                            showResult(stringBuilder.toString());
                        }
                        else{
                            Log.i(TAG, "run:网络错误 ");
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    //关闭数据流
                    finally {
                        if(reader!=null){
                            try {
                                reader.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        if(connection!=null){
                            connection.disconnect();
                        }
                    }

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        }
        ).start();
    }

    private void showResult(final String s) {
       runOnUiThread(new Runnable() {
           @Override
           public void run() {
               webContent.setText(s);
           }
       });

    }
}

activity_main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.hfut.operationhttpconnection.MainActivity">

    <EditText
        android:id="@+id/web_url"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:hint="请在此处输入要查看源码的网址"
        android:textSize="20dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="querySourceCode"
        android:layout_marginTop="10dp"
        android:text="查看网页源码"
        android:textSize="20dp" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/display_webContent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="此处显示网页源码内容" />
    </ScrollView>
</LinearLayout>

AndroidManifest.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hfut.operationhttpconnection">

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

3,运行结果

第一步:运行程序

                               

第二步:输入正确网址,点击“查看网页源码”按钮

                               

总结:关于HttpURLConnection的基本使用就简单介绍一下,因为以后使用的话,更多的是使用开源的项目。当然里面的原理都是一样的。它的其他方法或者使用技巧,自己可以结合兴趣研究一下。下一部分,我们会使用OkHttp这个开源项目来实现同样的效果;随便还可以学习一下如何在自己的项目中引入优秀的开源项目。本文示例代码链接

注:欢迎扫码关注

HttpURLConnection之POST请求 不仅从服务器读取数据,还有向服务器写入数据的功能,是双向交互,即通过获取到输入输出流来进行相关的数据写入和读取。这个类的使用并不陌生,通常我们都是通过这个类来封装一个请求后台数据的方法,暴露给外部使用。另因我们使用的是追踪流方式,上面的抓包内容中也看见了响应的消息。方式的请求参数放置在请求体,也就是在抓包请求报文的空行之后。回顾我们所使用的请求参数方式,无论是。三个部分构成:请求方法、请求接口和协议版本。支持多种请求方法,且在该类中有完整的状态码说明。也就是紧接着的空行之上的键值对参数。 阅读详情

相关推荐

HttpURLConnection和HttpClient获取Json数据

Android中提供的HttpURLConnection(JDK自带)和HttpClient(Apache提供)接口可以用来开发HTTP程序。 服务器端有如下json数据 [ { "image": "http://222.22.254.223:8080/web/a.jpg", "title": "新闻标题1", "content": "新闻内容1", "conut": "跟帖人数1" }, {

shun_fzll的专栏 1万+

《第一行代码》11.3.2 使用 HttpURLConnection 代替 HttpClient

由于 HttpClient 已经不被采用,我在学习 11.3.2 节的时候,就尝试用 HttpURLConnection 来代替。 以下是我用 HttpURLConnection 重写了的代码: package com.hultron.locationtest;public class MainActivity extends AppCompatActivity { public static

Hultron的博客 668

HttpURLConnection post方式发送xml

这两天上司让我编一个程序,读取数据库记录并远程调接口传xml报文,处理返回结果。 想想没啥难的,就二话不说的写起程序来了。结果竟然用了一天多时间才搞定,无比郁闷呐。还是记录下来方便自己查看,并且分享大家。jdk用的1.5.0_22版本。 期间用apache的httpclient也做过,也没有成功,对端一直给我返回个空指针异常,网上怎么查都查不出来个结果。 后来,反编译对端的class后,简直...

mapengwei的博客 1557

第一行代码9.2 使用HTTP协议访问网络(使用HttpURLConnection与OkHttp)

效果图: 使用HttpURLConnection访问网络 项目文件结构: MainActivity.java package com.example.newworktest; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import ...

GXQ的博客 453

3GPP Release与UE Category:无线通信标准演进与终端能力分级全解析

在蜂窝移动通信领域,技术标准的演进与终端设备的能力分级是理解整个产业发展的核心框架。其基本原理由国际标准组织3GPP通过周期性发布的技术规范版本(Release)来定义,每个Release都像一份阶段性的技术蓝图,规定了网络与终端应支持的新功能与性能基线。这种标准化机制的技术价值在于确保了全球设备的互联互通与网络的平滑升级,为从4G LTE到5G NR乃至未来的演进提供了清晰路径。在这一框架下,终端能力分级(如LTE时代的UE Category)是将标准转化为具体设备性能的关键环节,它直接定义了终端在射频和

weixin_34098209的博客 330

Jenkins插件下载慢?3分钟搞定国内镜像加速(含华为/腾讯/清华源对比)

本文详细介绍了如何通过国内镜像源加速Jenkins插件下载,包括华为云、腾讯云和清华源等主流镜像站的性能对比及一键配置方案。通过实测数据展示华为云镜像站表现最佳,下载速度达19.4MB/s,并提供sed命令、管理界面配置和Docker定制三种高效加速方案,帮助开发者快速解决插件下载慢的问题。

sql99的博客 320

《第一行代码》笔记(7)——HttpURLConnection基本用法

package com.zjw.mynetwork2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.vie...

choupeng6292的博客 164

从USB 2.0到USB 3.x:Synopsys SVT USB VIP配置避坑与接口选择指南

本文详细解析了从USB 2.0到USB 3.x的Synopsys SVT USB VIP配置要点,涵盖协议版本选择、物理接口匹配及UVM层次化架构实现。重点介绍了layering sequence的配置技巧和常见问题解决方案,帮助验证工程师高效避坑并优化验证流程。

weixin_42653691的博客 238

[android] HttpURLConnection的初步学习

android端的网络编程,前面写了socket有关的总结,这篇总结Http中的HttpURLConnection方法。

幸福的小骁仔的博客 600

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197

Win10 桌面回收站右键没有“清空回收站”选项怎么解决

Win10 桌面回收站右键没有“清空回收站” 选项怎么解决? 我之前不知道怎么捣鼓注册表(胡乱删了一些。。。) 导致想清空回收站的时候,右键却没有“清空回收站”这个选项了 以下是解决方法: 1、在桌面上新建一个txt文本文档,将以下代码拷贝进去: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\empty] "Com...

菜鸟的后花园 2万+

详细分析Java中的HttpURLConnection基本知识(附Demo)

HttpURLConnection 是 Java 提供的用于发送 HTTP 请求的类 它的作用是建立与服务器的连接,发送 HTTP 请求并获取服务器的响应,HttpURLConnection 是 Java 标准库中的一部分,用于实现 HTTP 协议的客户端 作用: 建立与服务器的连接 发送 HTTP 请求并获取服务器的响应 支持 GET、POST、PUT、DELETE 等 HTTP 请求方法 提供了一系列方法,用于设置请求头、写入请求体、获取响应码、获取响应体等操作

码农研究僧的博客 4289

MMCVDeformConv2d转TensorRT记录

MMCVDeformConv2d转Tensorrt

qq_35435798的博客 1778

Http访问网络(AsyncTask 异步加载和使用HttpURLConnection)

两种方式访问百度,并且将服务器所传回的值设置在TextView中。用AsyncTask来实现 一、HttpURLConnection 步骤:     URL url = new URL("http://www.baidu.com");     HttpURLConnection connection = url.openConnection();    //此处connection可设置

lee_Blog 3865

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2086

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android开发之使用HttpURLConnection进行POST请求

一、前提准备 在开始实际编码之前,我们有必要先了解下将会用的类以及方法,进行一个大体的了解。 1.URL类 这个类主要的功能是定位到要获取资源的网址以及打开连接.比如下面的代码:

w36680130的博客 1714

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java中的HttpURLConnection

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 一、概述 该类位于java.net 声明:public abstract class HttpURLConnectionextends URLConnection 支持 HTTP 特定功能的 URLConn...

孤云博客 5607

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Http之HttpURLConnection

HttpURLConnection Sun公司提供的库,也是Java的标准类库java.net中的一员,但这个类什么都没封装,用起来很原始,若需要高级功能,则会显得不太方便,比如重访问的自定义,会话和cookie等一些高级功能。 支持HTTPS协议,以流的形式进行上传和下载,配置超时时间,IPV6,连接池等功能。 用法(android): get方法 new Thread(new R...

zhouxing的博客 876

图片上传之 HttpClient和 HttpURLConnection学习

基本的资料 http://www.cnblogs.com/devinzhang/archive/2012/01/17/2325092.html 很像的 http://www.open-open.com/lib/view/open1378288264546.html 也要参考的 http://www.cnblogs.com/devinzhang/archive/2012/01/0...

djai0102的博客 107

HttpURLConnection 411错误解决

1.问题描述 Java HttpURLConnection类发送Http请求链接外网返回ResponseCode为411,对方为.NET服务器,网上查明原因可能来自以下: 1、可能是没有传http中的content-length参数,这个一般都有。2、可能是因为请求方式错误的,本来只是获取数据,应该使用GET的方式;但是你使用的是POST的方式。 首先第一个方法: conn.se...

diaomu5377的博客 1512

HttpURLConnection的使用

[java] view plaincopy01. /* 02. * URL请求的类别分为二类,GET与POST请求。二者的区别在于: 03. * a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, 04. * b:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。 05. */ 06. 07. URL ur

笔记 555

HttpURLConnection

HttpURLConnection 实现网络访问文件,并且将获取到的数据存放到字节数组中 1 public class HttpURLConnHelper { 2 private final static String TAG = "MyHttpHelperUtil"; 3 4 /** 5 * 作用:实现网络访问文件,将获取...

avx6193的博客 153

HttpURLConnection与HttpClient浅析

GET请求与POST请求 HTTP协议是现在Internet上使用得最多、最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源。 在介绍HttpURLConnection前,我们还是再来说一下URL请求最常用的两种方式:GET请求与POST请求。 GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连...

M3lon_的博客 248
上一篇: 《第一行代码》第二版 学习总结21 WebView的基本使用
下一篇: 《第一行代码》第二版 学习总结26 Android中子线程更新UI的三种方式
hfut_why
博客等级 码龄9年 318粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值