Android中网络传输不同内容

Android9.0明文网络传输适配 Android9.0明文网络传输适配Android9.0配置网络 Android9.0配置网络 从Android9.0系统开始,应用程序默认只允许使用 HTTPS 类型的网络请求,HTTP类型的网络请求因为有安全隐患默认不再被支持。 那么我们为了让程序使用HTTP,我们要进行如下配置:右击res目录–>New–>Directory,创建一个xml目录,接着右击xml目录–>New... 阅读详情

最近在实现向服务器发送数据,遇到一个小问题,Android中发送不同的数据内容的实现方式也不相同。下面解决了传递三种不同信息的三种方式。
1.传输键-值对(key-value)
2.传输自定义对象(Object)
3.传输自定义对象集合(List< Object >)

一、网络传输键值对(key-value)
Android中传递键值对我使用的方式是利用NameValuePair进行传输。这个应该比较基础,是比较传统的Android中网络传输的方式。
要点:将你要传输的键值对利用NameValuePair封装成List集合进行传输。
Android端:

    /**
     * 初始化发送的信息
     * @return
     */
    private List<NameValuePair> initMessage() {
        List<NameValuePair> message = new ArrayList<NameValuePair>();
        message.add(new BasicNameValuePair("name","张三"));
        message.add(new BasicNameValuePair("passwd", "112233"));
        return  message;
    }   
 /**
     * 网络传递键值对
     * @param content
     * @param url
     * @return
     */

    private static String HttpSentList(List<NameValuePair> content,String url){
        String result = null;
        HttpPost httpRequest = new HttpPost(url);
        try {
            HttpEntity httpEntity = new UrlEncodedFormEntity(content,"utf-8");
            httpRequest.setEntity(httpEntity);
            HttpClient httpClient = new DefaultHttpClient();
            HttpResponse httpResponse = httpClient.execute(httpRequest);
            int i = httpResponse.getStatusLine().getStatusCode();

            if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                result = EntityUtils.toString(httpResponse.getEntity());
                return result;
            }else{
                //tv.setText("request error");
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }

服务器端直接通过request对象拿对应key值的value对象即可。
服务器端:

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //常规传参---键值对
        request.setCharacterEncoding("UTF-8");
         String name = request.getParameter("name");
         String passwd = request.getParameter("passwd");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out
                    .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
            out.println("<HTML>");
            out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
            out.println("  <BODY>");
            out.print("    This is ");
            out.print("姓名:"+name+"密码"+passwd);
            out.println(", using the GET method");
            out.println("  </BODY>");
            out.println("</HTML>");
            out.flush();
            out.close();
        System.out.print("姓名:"+name+"密码"+passwd);

}

2.传输自定义对象(Object)
当网络中需要向服务器传输的是一个自定义对象,这时就不能用NameValuePair实现,需要用到java中学到的一个知识,使用序列化对象使用输入输出流进行传输序列化对象。
要点:
1.将自定义对象序列化
2.Android端和客户端需要都有这个序列化对象,且类名和包名要相同
Android端:

    /*
    初始化类对象信息
     */
    private Object initObjectMessage(){
        Book book = new Book();
        book.setName("疯狂Android讲义");
        book.setAuthor("李刚");
        return book;
    }
    /**
     * 网络传输对象流
     * @param obj
     * @param urlpos
     * @return
     */
    private static String HttpSentObject(Object obj,String urlpos){
        String line = "";
        URL url = null;
        ObjectOutputStream oos = null;
        try {
            url = new URL(urlpos);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setConnectTimeout(10000);
            connection.setReadTimeout(10000);
            connection.setRequestMethod("POST");
            oos = new ObjectOutputStream(connection.getOutputStream());
            oos.writeObject(obj);
            InputStreamReader read = new InputStreamReader(connection.getInputStream());
            BufferedReader br = new BufferedReader(read);
            while ((line = br.readLine()) != null) {
                Log.d("TAG", "line is " + line);
            }
            br.close();
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
        return line;
    }

服务器端:
要点:
1.要有和Android端类名和包名相同的自定义对象。
2.利用输入输出流进行读写。

//对象流-----序列化对象
public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ObjectInputStream ois = null;
           try {
                 ois = new ObjectInputStream(request.getInputStream());
                 Book book = (Book) ois.readObject();
                 System.out.println("书名是: " + book.getName());
                 System.out.println("作者是: " + book.getAuthor());
                 PrintWriter out = response.getWriter();
                 out.print("success");
                 out.flush();
                 out.close();
            } catch (Exception e) {
                 e.printStackTrace();
            } finally {
                 ois.close();
            }
            }

3.传输自定义对象集合。(List< Object >)
当要传输自定义对象的集合时,利用的网络传输方式和二相同,因为
oos.writeObject(obj);这个obj可以为List对象。但需要注意的一点是这其中我们使用的是ArrayList而不知List,至于List和ArrayList的区别自己到网上搜。
Android端:

    private ArrayList<Object> initListObjMessage(){
        ArrayList<Object> list = new ArrayList<Object>();
        Book book1 = new Book();
        book1.setName("疯狂Android讲义");
        book1.setAuthor("李刚");
        Book book2= new Book();
        book2.setName("深入理解Android");
        book2.setAuthor("某某");
        list.add(book1);
        list.add(book2);
        return  list;
    }
 private static String HttpSentListObj(ArrayList<Object> obj, String urlpos){
        String line = "";
        URL url = null;
        ObjectOutputStream oos = null;
        try {
            url = new URL(urlpos);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setConnectTimeout(10000);
            connection.setReadTimeout(10000);
            connection.setRequestMethod("POST");
            oos = new ObjectOutputStream(connection.getOutputStream());
            oos.writeObject(obj);
            InputStreamReader read = new InputStreamReader(connection.getInputStream());
            BufferedReader br = new BufferedReader(read);
            while ((line = br.readLine()) != null) {
                Log.d("TAG", "line is " + line);
            }
            br.close();
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
        return line;
    }

服务器端:
和二基本相同

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//对象集合
        ObjectInputStream ois = null;
           try {
                 ois = new ObjectInputStream(request.getInputStream());
                 List<Book> list = (List<Book>) ois.readObject();
                 System.out.println("书名是: " + list.get(0).getName());
                 System.out.println("作者是: " + list.get(0).getAuthor());
                 System.out.println("书名是: " + list.get(1).getName());
                 System.out.println("作者是: " + list.get(1).getAuthor());
                 PrintWriter out = response.getWriter();
                 out.print("success");
                 out.flush();
                 out.close();
            } catch (Exception e) {
                 e.printStackTrace();
            } finally {
                 ois.close();
            }
    }

基本就这些了,算是一种总结吧。

Uart2Socket:将PC的串口信息通过WiFi网络传输至安卓Android手机上 APK源程序下载地址: 【北方网通】    【电信网通】 C#源程序下载地址: 【北方网通】    【电信网通】 【下载说明】 1 点击上面的地址,打开下载页面 2 点击"普通下载"--等待30秒--点击"下载"按钮--保存 上图中的延迟,代表传输延迟300毫秒,由于电脑的运行速度过快,所以,安卓手机运行速度会跟不上。 在安卓程序里面输入服务器的ip和端口,开始 阅读详情

相关推荐

安卓调试/测试-AS(android studio)——工具篇之Android Monitors

前言:你可以不会调试优化内存和cpu占用,但截图,录屏你要还拿手机折腾半天就太low,其实AS内置了,就在Monitors里面,本篇重点介绍几个无脑点击调试app优化方法(PS:不定期更新) 基本概念 附带小工具Monitors相关 内存优化 探查器Android Profiler 替代Monitor 开启高级分析器功能 基本概念Android Monitors:让你可以很容易地监视应用程序的CP

feisher 1万+

AndroidのNameValuePair类

原文链接:http://www.cnblogs.com/birdshome/archive/2005/05/15/155593.html 简单名称值对节点类NameValuePair     本类位于System.Data.dll中,名为:System.Data.Common.NameValuePair。主要用途是在DBConnectionString类中,解析Connecti

mistal的专栏 687

Android中的App网络传输协议

App与服务器交互就会涉及到信息的交换,而信息的交互就必然需要一套完整的数据协议。这里首先需要明确一点的是什么是网络传输协议呢?这里首先套用一段百度百科的定义: 网络传输协议或简称为传送协议(Communications Protocol[1] ),是指计算机通信的共同语言。现在最普及的计算机通信为网络通信,所以“传送协议”一般都指计算机通信的传送协议,如TCP/IP、NetB

tectrol的专栏 4446

List<NameValuePair> params = new ArrayList<NameValuePair>();

List params = new ArrayList(); 定义了一个list,该list的数据类型是NameValuePair(简单名称值对节点类型),这个代码多处用于Java像url发送Post请求。在发送post请求时用该list来存放参数。 发送请求的大致过程如下: String url="http://www.baidu.com"; HttpPost httpp

ytldsc的专栏 3924

安卓面试题_安卓开发面经_Android面经(21/30)之序列化全解析

序列化问的问题不算多,掌握以下几个基本就够了

a763450633的博客 379

Shopee商品详情页反爬实战:手把手逆向x-sap-Ri和x-sap-Sec参数(附完整调试过程)

本文详细解析了Shopee商品详情页反爬机制中的x-sap-Ri和x-sap-Sec参数逆向过程。通过JS逆向技术,从环境数据采集到多层哈希运算,完整拆解了这两个关键参数的生成逻辑,并提供了实战技巧和Node.js实现方案,帮助开发者应对Shopee的动态加密挑战。

weixin_33701251的博客 1596

Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题

Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题 针对一个post请求,android studio中无法正常导入以下两个包: import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; ...

weixin_30691871的博客 563

基于Python API的ECMWF大气数据批量下载与自动化处理实践

本文详细介绍了如何利用Python API实现ECMWF大气数据的自动化批量下载与处理。针对遥感分析中手动下载ERA5等数据的痛点,文章提供了从API密钥配置、核心脚本编写到元数据解析、任务队列调度及数据质量检查的全流程实践指南,旨在帮助科研与工程人员高效获取并处理大规模气象数据。

u8v9w0x1y的博客 479

AndroidStudio中NameValuePair和URLEncodedUtils导包错误

今天遇到在Android studio中出现无法导入NameValuePair和URLEncodedUtils包的问题。 提示信息:Cannot resolve symbol NameValuePair. Cannot resolve symbol URLEncodedUtils. 解决办法是: 在build.gradle文件中添加如下代码:android { ... useLibrar

m00123456789的博客 2232

FICO F.27 Customer statement 打印

需求,定制化打印,替换标准的F.27打印 类似于采购订单的打印,但是略有不同,查阅资料之后步骤如下: T-code F.27 is SAP standard program to produce customer/vendor correspondence (letter). Correspondence Type is used to specify the related printing program and form for the particular correspondence. SAP

IamRunjiang的博客 1965

墨水屏高效开发:架构、开源库与实战优化指南

嵌入式显示技术中,电子墨水屏以其类纸观感和超低功耗特性,在电子书阅读器、智能办公本及工业仪表等场景中占据独特地位。其工作原理基于微胶囊电泳技术,仅在画面刷新时消耗电能,静态显示时功耗近乎为零,这带来了极致的续航优势。为实现流畅的交互体验,开发者需构建分层渲染架构,通过硬件抽象层统一驱动接口,并引入帧缓冲与差异比较算法智能决策局部刷新区域,从而大幅降低刷新延迟与功耗。开源库如GxEPD2和LVGL为墨水屏适配提供了关键支持,结合波形文件管理与电源优化策略,能有效解决残影与卡顿问题。本文聚焦于eink墨水屏高效

weixin_42545636的博客 411

Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题,使用List<NameValuePair>报错

https://blog.youkuaiyun.com/cyooke/article/details/51783572 怕忘记,记下来

sy569824306的博客 1063

RK3588开发板NPU加速YOLO目标检测完整实战教程

🚀 RK3588开发板NPU加速YOLO目标检测实战 本文详细介绍了如何在瑞芯微RK3588开发板上利用内置NPU加速YOLO目标检测的全流程: 1️⃣ 环境准备:配置RKNPU2 SDK和aarch64交叉编译器,搭建Ubuntu开发环境 2️⃣ 模型转换:从ONNX格式转换为专用RKNN模型,适配NPU硬件特性 3️⃣ 性能对比:NPU推理将处理时间从833ms降至50ms以下,帧率提升16倍 4️⃣ 实战应用:支持图像/视频流/摄像头实时检测,提供完整编译和运行命令 关键优势:专为边缘AI设计的6T

FJN110的博客 931

Apereo CAS Surrogate 认证的 REST 存储:接口契约、配置项与源码实现解析

Surrogate(代理)认证允许一个已认证的用户以另一个用户的名义继续访问受保护的服务,是 CAS 中实现"管理员代登录""客服代操作"等场景的核心机制。本文以 CAS 官方文档中 [REST Surrogate 认证存储](https://link.gitcode.com/i/f89ce11a7e39e1c653a7809e99f6b69a) 为骨架,结合仓库内 `cas-server-sup

gitblog_01170的博客 501

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1357

MySQL——cost成本计算之MySQL如何选择使用索引(trace)

文章目录前言trace工具分析执行计划 前言 在之前博客中,根据测试案例,发现同样的sql语句,因为传入的条件值的不同,导致MySQL有时候选择使用索引,有时候又不适用索引。 如下所示sql的执行计划: EXPLAIN SELECT * FROM employees WHERE name > 'aaa'; EXPLAIN SELECT * FROM employees WHERE name > 'zzzz'; 在MySQL中,为什么会出现上述这种玄乎的现象呢? 本篇博客重点说明原因。 在说

专注写bug 679

gzip与HTTP & Android网络传输中gzip的使用总结

本文将介绍gzip和Http的编码关系,以及在Android中,如何正确使用gzip进行数据压缩传输。

卜大爷的博客 2万+

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

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

Android 网络传输 加密与验证

最近开始接触到网络传输加密与验证,起初很蒙圈,经过投入一定时间的摸索,终于打通了整个流程,在此记录下笔记。     首先说说加密与验证涉及到的一些概念以及这样子做的必要性。至于为什么要加密这个很容易理解,但如何优雅的加密,使别有用心的攻击者破不了,同时也不影响用户的使用。加密的方式就想得很重要,从加密解密的密钥的个数来说,加密的方式有两类:对称加密与非对称加密。 对称加密的钥匙就一把,加密用它,

xialiao_swust的博客 1111

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android 编解码的视频进行保存及网络传输

继上篇,视频编解码并将处理后的数据保存到文件或进行网络传输时,需要考虑多个方面,包括数据的格式、传输的效率、网络的稳定性等。以下是详细的步骤。

Gabo_Summer的博客 676

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

App安全之网络传输安全

App安全之网络传输安全 移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全。所以当我们谈论App安全问题的时候一般来说在以下三类范畴当中。 App代码安全,包括代码混淆,加密或者app加壳。 App数据存储安全,主要指在磁盘做数据持久化的时候所做的加密。 App网络传输

大写的牛逼 6502

android 网络传输中UDP和TCP传输

TCP和UDP在网络传输中非常重要,在Android开发中同样重要。   首先来看一下什么是TCP和UDP。 什么是TCP?   TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算

huangwei858的专栏 872

Android安全网络传输

1 配置 从Android Nougat(7.0)开始,谷歌改变了网络安全策略。 自签的CA证书将默认不被TLS/SSL连接信任,这意味着charles等工具可能无法抓取HTTPS的明文数据。 查看路径: <application android:networkSecurityConfig="@xml/network_security_config" res/xml/network_secu...

Tesi1a的充电桩 828

Android 网络传输数据之解析XML格式数据(Pull&SAX)

Android 网络传输数据之解析XML格式数据 每个访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据也可以从服务器上获取数据。下面我们就介绍下网络上传输数据最常用的一种格式XML数据格式。 ...

vagabond_的博客 576

android gson包_Android基础(15)—网络传输协议

网络传输协议App与服务器交互就会涉及到信息的交换,而信息的交互就必然需要一套完整的数据协议。网络传输协议或简称为传送协议(Communications Protocol),是指计算机通信的共同语言。现在最普及的计算机通信为网络通信,所以“传输协议”一般都指计算机通信的传输协议,如TCP/IP、NetBEUI等。然而,传输协议也存在于计算机的其他形式通信,例如,面向对象编程里面对象之间的...

weixin_39969232的博客 528

Android网络传输中必用的两个加密算法:MD5 和 RSA

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码) MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了。但这两种算法使用环境有差异,刚好互补。 一、MD5算法 首先MD5是不可逆的,只能加密而不能解密。比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E

qq_34425418的博客 272
上一篇: java中list集合的clear
下一篇: 轮播循环的Viewpager
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值