Android-非常棒的HTTP通讯总结

如何监控Android模拟器的HTTP访问情况 前几个月,在调试某个应用时,需要监控应用与服务器之间的HTTP通讯。从搜索引擎找到的方案几乎全错。要么是人云亦云,要么是只能满足旧的平台版本,要么根本就是臆测。不得其解之际,用比较复杂的方法解决了。昨天想起来,觉得太过窝囊,于是重整旗鼓,终于在官方文档上找到一点启发。把真正能解决问题的方案写下来,一方面给同样遇到问题的朋友一点帮助,另一方面也是提醒自己,官方文档是解决问题的第一方案,但读文档也有讲究。不读文档、不思考,一遇问题就上网搜,结果大概都会事倍功半。 阅读详情

这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。

先贴代码:

01 public class Activity1 extends Activity {
02  
03     private final String DEBUG_TAG = "System.out";
04  
05     private TextView mTextView;
06     private Button mButton;
07  
08     protected void onCreate(Bundle savedInstanceState) {
09         super.onCreate(savedInstanceState);
10         setContentView(R.layout.main);
11  
12         mTextView = (TextView) findViewById(R.id.TextView01);
13         mButton = (Button) findViewById(R.id.Button01);
14         mButton.setOnClickListener(new httpListener());
15     }
16  
17     // 设置按钮监听器
18     class httpListener implements OnClickListener {
19         public void onClick(View v) {
20             refresh();
21         }
22     }
23  
24     private void refresh() {
25         String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
26         // URL可以加参数
27         // String httpUrl =
29         String resultData = "";
30         URL url = null;
31         try {
32             // 创建一个URL对象
33             url = new URL(httpUrl);
34         } catch (MalformedURLException e) {
35             Log.d(DEBUG_TAG, "create URL Exception");
36         }
37         // 声明HttpURLConnection对象
38         HttpURLConnection urlConn = null;
39         // 声明InputStreamReader对象
40         InputStreamReader in = null;
41         // 声明BufferedReader对象
42         BufferedReader buffer = null;
43         String inputLine = null;
44         if (url != null) {
45             try {
46                 // 使用HttpURLConnection打开连接
47                 urlConn = (HttpURLConnection) url.openConnection();
48                 // 得到读取的内容(流)
49                 in = new InputStreamReader(urlConn.getInputStream());
50                 // 创建BufferReader对象,输出时候用到
51                 buffer = new BufferedReader(in);
52                 // 使用循环来读取数据
53                 while ((inputLine = buffer.readLine()) != null) {
54                     // 在每一行后面加上换行
55                     resultData += inputLine + "\n";
56                 }
57                 // 设置显示取的的内容
58                 if (resultData != null && !resultData.equals("")) {
59                     mTextView.setText(resultData);
60                 } else {
61                     mTextView.setText("读取的内容为空");
62                 }
63             } catch (IOException e) {
64                 e.printStackTrace();
65             } finally {
66                 try {
67                     // 关闭InputStreamReader
68                     in.close();
69                     // 关闭URL连接
70                     urlConn.disconnect();
71                 } catch (IOException e) {
72                     e.printStackTrace();
73                 }
74             }
75         } else {
76             Log.d(DEBUG_TAG, "URL is NULL");
77         }
78     }
79 }

 


第二种方式:

001 public class Activity2 extends Activity {
002  
003     private final String DEBUG_TAG = "System.out";
004  
005     private TextView mTextView;
006     private Button mButton;
007  
008     protected void onCreate(Bundle savedInstanceState) {
009         super.onCreate(savedInstanceState);
010         setContentView(R.layout.main);
011  
012         mTextView = (TextView) findViewById(R.id.TextView01);
013         mButton = (Button) findViewById(R.id.Button01);
014         mButton.setOnClickListener(new httpListener());
015     }
016  
017     // 设置按钮监听器
018     class httpListener implements OnClickListener {
019         public void onClick(View v) {
020             refresh();
021         }
022     }
023  
024     private void refresh() {
025         String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
026         String resultData = "";
027         URL url = null;
028         try {
029             // 创建一个URL对象
030             url = new URL(httpUrl);
031         } catch (MalformedURLException e) {
032             Log.d(DEBUG_TAG, "create URL Exception");
033         }
034         // 声明HttpURLConnection对象
035         HttpURLConnection urlConn = null;
036         // 声明InputStreamReader对象
037         InputStreamReader in = null;
038         // 声明BufferedReader对象
039         BufferedReader buffer = null;
040         String inputLine = null;
041         // 声明DataOutputStream流
042         DataOutputStream out = null;
043         if (url != null) {
044             try {
045                 // 使用HttpURLConnection打开连接
046                 urlConn = (HttpURLConnection) url.openConnection();
047                 // 因为这个是POST请求所以要设置为true
048                 urlConn.setDoInput(true);
049                 urlConn.setDoOutput(true);
050                 // 设置POST方式
051                 urlConn.setRequestMethod("POST");
052                 // POST请求不能设置缓存
053                 urlConn.setUseCaches(false);
054                 urlConn.setInstanceFollowRedirects(false);
055                 // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
056                 urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
057                 // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成
058                 // 要注意的是connectio.getOutputStream会隐含的进行connect
059                 urlConn.connect();
060                 // DataOutputStream流
061                 out = new DataOutputStream(urlConn.getOutputStream());
062                 String content = "par=" + URLEncoder.encode("abcdefg", "gb2312");
063                 // 将要上传的内容写入流中
064                 out.writeBytes(content);
065                 // 得到读取的内容(流)
066                 in = new InputStreamReader(urlConn.getInputStream());
067                 // 创建BufferReader对象,输出时候用到
068                 buffer = new BufferedReader(in);
069                 // 使用循环来读取数据
070                 while ((inputLine = buffer.readLine()) != null) {
071                     // 在每一行后面加上换行
072                     resultData += inputLine + "\n";
073                 }
074                 // 设置显示取的的内容
075                 if (resultData != null && !resultData.equals("")) {
076                     mTextView.setText(resultData);
077                 } else {
078                     mTextView.setText("读取的内容为空");
079                 }
080             } catch (IOException e) {
081                 e.printStackTrace();
082             } finally {
083                 try {
084                     // 刷新DataOutputStream流
085                     out.flush();
086                     // 关闭DataOutputStream流
087                     out.close();
088                     // 关闭InputStreamReader
089                     in.close();
090                     // 关闭URL连接
091                     urlConn.disconnect();
092                 } catch (IOException e) {
093                     e.printStackTrace();
094                 }
095             }
096         } else {
097             Log.d(DEBUG_TAG, "URL is NULL");
098         }
099     }
100 }

 

第三种方式

01 public class Activity3 extends Activity{
02     private TextView mTextView;
03     private Button mButton;
04  
05     protected void onCreate(Bundle savedInstanceState) {
06         super.onCreate(savedInstanceState);
07         setContentView(R.layout.main);
08         mTextView = (TextView) findViewById(R.id.TextView01);
09         mButton = (Button) findViewById(R.id.Button01);
10         mButton.setOnClickListener(new httpListener());
11     }
12  
13     // 设置按钮监听器
14     class httpListener implements OnClickListener {
15         public void onClick(View v) {
16             String httpUrl = "http://192.168.0.101:8080/Test/test.jsp?par=HttpClient_android_Get";
17             // HttpGet连接对象
18             HttpGet httpRequest = new HttpGet(httpUrl);
19             try {
20                 // 取的HttpClient对象
21                 HttpClient httpclient = new DefaultHttpClient();
22                 // 请求HttpClient,取的HttpResponse
23                 HttpResponse httpResponse = httpclient.execute(httpRequest);
24                 // 请求成功
25                 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
26                     // 取的返回的字符串
27                     String strResult = EntityUtils.toString(httpResponse.getEntity());
28                     // 这个返回值可能会在行尾出现小方格
29                     // 在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
30                     String strsResult = strResult.replace("\r", "");
31                     mTextView.setText(strsResult);
32                 } else {
33                     mTextView.setText("请求错误");
34                 }
35             } catch (ClientProtocolException e) {
36                 mTextView.setText(e.getMessage().toString());
37             } catch (IOException e) {
38                 mTextView.setText(e.getMessage().toString());
39             } catch (Exception e) {
40                 mTextView.setText(e.getMessage().toString());
41             }
42         }
43     }
44 }

 

第四种方式

01 public class Activity4 extends Activity{
02     private TextView mTextView;
03     private Button mButton;
04  
05     protected void onCreate(Bundle savedInstanceState) {
06         super.onCreate(savedInstanceState);
07         setContentView(R.layout.main);
08         mTextView = (TextView) findViewById(R.id.TextView01);
09         mButton = (Button) findViewById(R.id.Button01);
10         mButton.setOnClickListener(new httpListener());
11     }
12  
13     // 设置按钮监听器
14     class httpListener implements OnClickListener {
15         public void onClick(View arg0) {
16             String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
17             // 创建HttpPost连接对象
18             HttpPost httpRequest = new HttpPost(httpUrl);
19             // 使用NameValuePair来保存要传递的Post参数
20             List params = new ArrayList();
21             // 添加要传递的参数
22             params.add(new BasicNameValuePair("par","HttpClient_android_Post"));
23             try {
24                 // 设置字符集
25                 HttpEntity httpentity = new UrlEncodedFormEntity(params,"gb2312");
26                 // 请求httpRequest
27                 httpRequest.setEntity(httpentity);
28                 // 取的默认的HttpClient
29                 HttpClient httpclient = new DefaultHttpClient();
30                 // 取的HttpResponse
31                 HttpResponse httpResponse = httpclient.execute(httpRequest);
32                 // HttpStatus.SC_OK表示连接成功
33                 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
34                     // 取的返回的字符串
35                     String strResult = EntityUtils.toString(httpResponse.getEntity());
36                     // 这个返回值可能会在行尾出现小方格
37                     // 在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
38                     String strsResult = strResult.replace("\r", "");
39                     mTextView.setText(strsResult);
40                 } else {
41                     mTextView.setText("请求错误");
42                 }
43             } catch (ClientProtocolException e) {
44                 mTextView.setText(e.getMessage().toString());
45             } catch (IOException e) {
46                 mTextView.setText(e.getMessage().toString());
47             } catch (Exception e) {
48                 mTextView.setText(e.getMessage().toString());
49             }
50         }
51     }
52 }
android netty5局域网通讯(客户端+服务端) 这是一个WebSocket协议的Demo,仅仅粗略的实现了功能        WebSocket是HTML5开始提供的一种浏览器与服务器建进行全双工通讯的网络协议,它的出现是为了解决HTTP协议效率低下的问题,WebSocket能更好的节省服务器资源和带宽并达到实时通信! Demo下载 Client: package com.tomorrow_p.netty_p; i 阅读详情

相关推荐

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

开源 java android app 开发(七)通讯之Tcp和Http

本文记录了作者从嵌入式软件开发转向Android应用开发的经历,重点介绍了使用Java进行Android开发的学习过程。文章详细描述了开发环境的搭建、工程文件结构、GUI界面布局、文件和数据库存储、多媒体使用等关键步骤,并特别强调了网络通讯协议(如TCP和HTTP)在Android应用中的实际应用。作者通过代码示例展示了如何实现TCP客户端与服务器的通信以及HTTP请求的处理,包括权限配置、界面设计和代码实现。此外,文章还探讨了Android网络安全配置的相关问题,并提供了解决方案。通过这些内容,作者希望记

ajassi2000的博客 1307

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 549

使用WebSocket实现即时通讯,含安卓端与服务端

公司项目有即时通讯的需求,完成之后整理一下贴出来,文章最后有GitHub上Android项目地址。 目录 为什么是WebSocket 服务器端代码 安卓端的实现 Android项目地址 为什么是WebSocket Http是单向的,不能服务器主动给客户端发送数据,如果使用轮询的方式,将浪费流量和服务器的资源。WebSocket可以弥补这一缺点。在WebSocket中,只需要服务器和浏...

chengyingdong111的博客 4781

Midscene.js(1):Chrome 插件实战之基于 AI 驱动 WEB UI 自动化测试「喂饭教程」

Midscene.js 是一款开源的AI驱动UI自动化工具,支持自然语言交互、数据提取、断言验证等多种功能。自然语言交互。本文将以 Midscene.js Chrome 插件为例,带你从零上手,体验如何用最简单的方式实现高效、智能的UI自动化测试。

blues_C的博客 4404

关于 SAP UI5 应用 url 中的特殊符号 # 的作用介绍

符号在 SAP UI5 的 URL 中不仅仅是一个分隔符,更是动态路由、状态管理和深链接的关键所在。通过合理使用,开发者可以实现高效、流畅的用户体验,同时保持系统的可维护性和扩展性。通过 SAP UI5 提供的灵活路由机制,企业应用可以轻松实现复杂导航需求,同时为用户提供直观的交互体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 411

Android中使用Retrofit库进行Http通讯

关于Retrofit2的使用流程

持剑 1762

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4458

android网络通讯,Android网络请求通讯

一个多月没写博客了,天天忙到凌晨.具体内容是准备近期的培训资料.这种生活要持续到春节之前.经常感慨上年纪了记忆力衰退的很厉害.许多事情回头就忘的一干二净,额米豆腐.正好昨天刚整理了一下网络通讯的内容,今天写写吧,算是给2014年留下一个尾巴的脚步.Android通讯和java普通通讯没什么两样,不是tcp就是udp,通讯方式也无就是socket、http和soap.最节省资源的方式个人建议还是ht...

weixin_39885683的博客 215

面向高速Serdes的信号完整性优化:从封装 - 板级互连局限到封装内互连技术演进(一)

本文针对高速SerDes互连链路中的关键电磁效应展开研究:1)揭示了封装-主板互连结构在毫米波频段易激发谐振效应,导致53GHz传输陷波和阻抗偏移;2)提出基于本征模分析的谐振抑制方法,通过优化接地过孔排布使带宽突破95GHz;3)系统比较了方形/六边形BGA排布下23种差分对朝向的串扰特性,证实六边形阵列可将功率和串扰降低30%以上;4)论证了100GHz以上带宽需采用封装内互连架构,其较传统方案减少50%阻抗不连续节点。

小孟同学的博客 231

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1210

【Android】网络通讯

看完了Android存储方面的内容,由于之前自己对数据存储方面有自己写过小封装,Android提供的api也都比较简单,所以就不打算再重新写了。今天看了下关于网络通讯方面的内容,进步加深对网络方面的一个理解,写下自己的理解,和一些基本的操作,这样方便以后在遇到一些基础的问题的时候,不需要自己谷歌,通过博客就可以很好地找到,提升效率。网络通讯 1.网络通讯流程 2.WebView

hehedd23 831

YOLOv13必学核心:SKAttention选择性核注意力机制原理 + 实战全拆解

SKAttention的核心思想来源于人类视觉系统的一个重要特性:根据不同的视觉刺激,人眼能够自适应地调整感受野大小。SKAttention将这一生物学原理转化为深度学习中的注意力机制,通过动态选择和融合不同大小的卷积核,实现了自适应的多尺度特征提取。在人类视觉皮层中,不同的神经元具有不同大小的感受野,而且这些感受野的大小会根据视觉刺激的类型动态调整。本文将深入解析SKAttention模块的设计原理、数学基础、实现细节,以及其在YOLOv13目标检测框架中的集成应用,为读者提供全面而深入的技术理解。

FJN110的博客 97

Android HTTP通讯

这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。 先贴代码: 01 publicclassActivity1extendsActivity { 02 03 privatefinalString DEBUG_TAG ="System.out"; ...

weixin_34268169的博客 95

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android中的http通讯(2)

功能:通过网络请求下载一张图片到本地展示 在AndroidManifest.xml文件中添加权限:         xml布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

BAOXF专栏 341

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android中,提供3种HTTP通讯接口

Android中,提供3种HTTP通讯接口    1.标准Java接口(java.net)     2.Apache接口(org.apache.http)     3.Android网络接口(android.net.http) Apache接口提供了更为丰富,搞笑的工具包 Apache接口(客户端)   DefaultHttpClient   HttpGet   HttpPost   Http

632

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

我的MSF之Android木马渗透的学习笔记

使用kali制作Android木马并进行通讯录渗透的学习笔记

yuan_boss的博客 6959

Android程序员必看安卓binder服务intent

9).JavaI/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。3).面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;

m0_60607245的博客 818

Android中的HTTP通讯

此文,仅做为个人学习Android,记录成长以及方便复习!前面使用线程和异步加载配合HttpURLConnection实现通讯,最后使用HttpClient实现通讯)简单的实现通过Eclipse EE 软件,使用Servlet+TomCat搭建一个Web项目,接收和响应Android项目发送过来的数据首先通过Eclipse创建一个项目《web》创建一个JSP页面 index.jsp,简单粗暴的一个...

qqazl001的博客 891

Android 消息队列之MQTT的使用:物联网通讯,HTTP太重了,使用MQTT;断网重连、注册、订阅、发送数据和接受数据,实现双向通讯。

目录: 问题 MQTT是什么以及为什么使用 如何使用:第一阶段、基础功能 如何使用:第二阶段、增加断网重连 如何使用:第三阶段、封装 一、问题 在开发的时候,我们一般都使用Http和后台进行通讯,比如我们是开发物联网的,设备会有很多数据需要频繁发给后台,使用Http来做这件事情,就感觉很重,比如会遇到如下这些问题: 开发成本:需要后台创建接口,前台去请求。 连接数过多:在HTTP协议中,每次请求都需要建立一个新的连接,这可能导致连接数过多,特别是在高并发场景下。对于自动售卖机来说,如果同时有大量的

前期后期 2162
上一篇: Android中Style和Theme的使用
下一篇: Android 怎么获取手机端的ip地址
Jymot
博客等级 码龄14年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值