热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android通过HttpURLConnection访问Http协议网络

本文目录第一步:添加网络访问权限第二步:使用HttpURLConnection访问网络代码示例Android原生目前支持两种方式访问http协议的网络&

本文目录

  • 第一步:添加网络访问权限
  • 第二步:使用HttpURLConnection访问网络
  • 代码示例

Android原生目前支持两种方式访问http协议的网络,第一种是HttpURLConnection,另外一种是oKHttp,下面来介绍一下用HttpURLConnection来访问访问http协议的方法

在这里插入图片描述

第一步:添加网络访问权限

AndroidManifest.xml文件中添加如下权限



http请求需要在 AndroidManifest.xml文件的application节点添加如下属性

android:usesCleartextTraffic="true"

第二步:使用HttpURLConnection访问网络

首先我们需要得到HttpURLConnection的实例,获取HttpURLConnection的方法如下

URL url = new URL("http://baidu.com");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

拿到HttpURLConnection的实例以后我们可以通过HttpURLConnection的实例来设置一些http请求的方式

urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(8000);
urlConnection.setRequestProperty("key","value");

方法名含义
setRequestMethod请求方式(常见的包括GET和POST等)
setConnectTimeout请求超时时间
setRequestProperty请求中带的参数

请求发送出去以后,我们就可以通过HttpURLConnection的实例拿到请求的返回数据

InputStream inputStream = urlConnection.getInputStream();// 字节流
Reader reader = new InputStreamReader(inputStream);//字符流BufferedReader bufferedReader = new BufferedReader(reader);// 缓存流

然后我们就可以从缓存流bufferedReader中读取数据

StringBuilder result = new StringBuilder();;String temp;while ((temp = bufferedReader.readLine()) != null) {result.append(temp);}Log.i("MainActivity", result.toString());

读完数据以后不要忘记把数据流关闭哦

if (reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (bufferedReader!=null){try {bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}if (urlConnection != null){urlConnection.disconnect();}

网络请求访问我们还需要放到子线程中去

new Thread(){@Overridepublic void run() {super.run();getNetwork();}}.start();

把得到的数据切到主线程中用文本展示出来

runOnUiThread(new Runnable() {@Overridepublic void run() {mTextView.setText(result);}});

代码示例

完整代码如下

MainActivity.java

package com.lucashu.http;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;public class MainActivity extends AppCompatActivity {TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = findViewById(R.id.button);mTextView = findViewById(R.id.textView);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(){@Overridepublic void run() {super.run();getNetwork();}}.start();}});}private void getNetwork() {InputStream inputStream = null;Reader reader = null;BufferedReader bufferedReader = null;HttpURLConnection urlConnection = null;try {URL url = new URL("http://baidu.com");urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setRequestMethod("GET");urlConnection.setConnectTimeout(8000);urlConnection.setRequestProperty("key","value");inputStream = urlConnection.getInputStream();// 字节流reader = new InputStreamReader(inputStream);//字符流bufferedReader = new BufferedReader(reader);// 缓存流final StringBuilder result = new StringBuilder();;String temp;while ((temp = bufferedReader.readLine()) != null) {result.append(temp);}Log.i("MainActivity", result.toString());runOnUiThread(new Runnable() {@Overridepublic void run() {mTextView.setText(result);}});inputStream.close();reader.close();bufferedReader.close();} catch (Exception e) {Log.i("MainActivity", e.getMessage());e.printStackTrace();}finally {if (reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (bufferedReader!=null){try {bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}if (urlConnection != null){urlConnection.disconnect();}}}
}

AndroidManifest.xml

<?xml version&#61;"1.0" encoding&#61;"utf-8"?>
<manifest xmlns:android&#61;"http://schemas.android.com/apk/res/android"package&#61;"com.lucashu.http"><uses-permission android:name&#61;"android.permission.INTERNET" /><uses-permission android:name&#61;"android.permission.ACCESS_NETWORK_STATE" /><applicationandroid:allowBackup&#61;"true"android:icon&#61;"&#64;mipmap/ic_launcher"android:label&#61;"&#64;string/app_name"android:roundIcon&#61;"&#64;mipmap/ic_launcher_round"android:supportsRtl&#61;"true"android:theme&#61;"&#64;style/AppTheme"android:usesCleartextTraffic&#61;"true"><activity android:name&#61;".MainActivity"><intent-filter><action android:name&#61;"android.intent.action.MAIN" /><category android:name&#61;"android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

activity_main.xml

<?xml version&#61;"1.0" encoding&#61;"utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"xmlns:app&#61;"http://schemas.android.com/apk/res-auto"xmlns:tools&#61;"http://schemas.android.com/tools"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"tools:context&#61;".MainActivity"><TextViewandroid:id&#61;"&#64;&#43;id/textView"android:layout_width&#61;"wrap_content"android:layout_height&#61;"wrap_content"android:text&#61;"Hello World!"app:layout_constraintBottom_toBottomOf&#61;"parent"app:layout_constraintLeft_toLeftOf&#61;"parent"app:layout_constraintRight_toRightOf&#61;"parent"app:layout_constraintTop_toTopOf&#61;"parent"app:layout_constraintVertical_bias&#61;"0.323" /><Buttonandroid:id&#61;"&#64;&#43;id/button"android:layout_width&#61;"wrap_content"android:layout_height&#61;"wrap_content"android:layout_marginTop&#61;"96dp"android:text&#61;"访问网络数据"app:layout_constraintEnd_toEndOf&#61;"parent"app:layout_constraintStart_toStartOf&#61;"parent"app:layout_constraintTop_toTopOf&#61;"parent" /></androidx.constraintlayout.widget.ConstraintLayout>


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
author-avatar
JoanNewLife
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有