![Android智能穿戴设备开发实战详解](https://wfqqreader-1252317822.image.myqcloud.com/cover/166/31729166/b_31729166.jpg)
4.4 如何高效的上传数据
“上传”的反义词是“下载”,上传就是将信息从个人计算机(本地计算机)传递到中央计算机(远程计算机)系统上,让网络上的人都能看到。将制作好的网页、文字、图片等发布到互联网上去,以便让其他人浏览、欣赏。这一过程称为上传。在本节的内容中,将详细讲解在Android穿戴设备中上传数据的基本知识。
4.4.1 将穿戴设备中的文件上传到远程服务器
在使用穿戴设备时,可以使用拍照装置进行拍照。为了节省设备的容量,可以将照片上传到远程服务器。例如在下面的实例中,演示了在Android穿戴设备中将文件上传到远程服务器的方法。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100001.jpg?sign=1739324812-O61L7LFbt4Nytw3damKj2fqnjJCPFfRt-0-62b616bbcb28b0b0b99252e077cd006e)
编写主程序文件chuan.java,其具体实现流程如下所示。
● 分别声明变量newName、uploadFile和actionUrl,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100002.jpg?sign=1739324812-AvosVkl8LwOzFsu22VtGrOJmFaCAMOJN-0-2c55c78041379991a64cebe111a16f7d)
● 通过mText1对象获取文件路径,根据mText2设置上传网址,单击按钮后调用上传方法uploadFile()。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100003.jpg?sign=1739324812-FbWdXinWs7ZlP3Swz4Ma6x4JU4xAFL1k-0-43f05251881d65a87055e6685822e7c1)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00101001.jpg?sign=1739324812-vDXNZgoEpNikvtCOKb9xqbH8ByzRF0t3-0-9f543c2d05e06af0d914cf0a9aa3655a)
● 定义方法uploadFile()将文件上传至Server,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00101002.jpg?sign=1739324812-R7xsKvWvEVqjPIC01ni71vMZZkputt4K-0-8bfa824d75a72a578669407b8d95bade)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102001.jpg?sign=1739324812-i4VOwV8l6H2VeVqfzzN3AbB5gNzce93b-0-0ced2d3dee760484919f7892159cbd37)
● 定义方法showDialog(String mess)来显示提示对话框,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102002.jpg?sign=1739324812-TehmDZIVX3v8Cvwz919Zz1G2A4pjkhxa-0-31820735f1d64c09860922e11de48d90)
执行后单击“上传”按钮可以将指定的文件上传到服务器,如图4-8所示。
4.4.2 使用GET方式上传数据
在Andorid系统中可以通过GET方式或POST方式上传数据,两者的具体区别如下所示。
● GET上传的数据一般是很小的并且安全性能不高的数据。
● POST上传的数据适用于数据量大,数据类型复杂,数据安全性能要求高的地方。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102003.jpg?sign=1739324812-owQXhkeCWm1ldnycQBx5nWiZnXbOz5vW-0-373af02c0ed91a9ef6e7d27357c607d9)
图4-8 上传到服务器
在Android穿戴设备开发应用中,采用GET方式向服务器传递数据的基本步骤如下所示。
(1)利用Map集合对数据进行获取并进行数据处理,例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103001.jpg?sign=1739324812-SlwW8ZFg0LhILpdvfuLEJNw5S7KIgAUK-0-1d6bd03cf81f0cc4ba7af87dde41a424)
(2)新建一个StringBuilder对象。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103002.jpg?sign=1739324812-JwkEVtKCm8fJ5r00hFIOsxywnE6uEzIZ-0-3c483d52d00c749f6ab5682f0407d48c)
(3)新建一个HttpURLConnection的URL对象,打开连接并传递服务器的path。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103003.jpg?sign=1739324812-MsjSDSna06rySVFAWXCLrBAjeyyTvCTw-0-3a96c151fc9c1afd233c5428f8fe1ad0)
(4)设置超时和连接的方式。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103004.jpg?sign=1739324812-tNztiYPSEI4RXp06UC3bnDEiekOT2vZJ-0-58c53711ea464870442992347bd19b68)
在接下来的内容中将通过一个具体实例的实现过程介绍在Android穿戴设备中采用GET方式向服务器传递数据的基本方法。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103005.jpg?sign=1739324812-m9n4LpMoJsYwCMJih0XEgowGKWJATiMB-0-de52a3f400f51784c1933ea5fc8f7710)
本实例的具体实现流程如下所示。
(1)打开Eclipse,新建一个名为“ServerForGETMethod”的Web工程,并自动生成配置文件web.xml。
(2)创建一个名为ServletForGETMethod的Servlet,功能是接收并处理通过GET方式上传的数据。实现文件ServletForGETMethod.java的具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103006.jpg?sign=1739324812-SwXblxxMKvdw8GXLRuQNVjFtUYXPxkI3-0-75a5fa284f60b90aca916128d071733d)
在上述代码中,为了避免出现中文乱码的问题,特意实现了ISO8854-1和UTF-8转换处理。请读者再看看下面的代码,很好的解决了乱码的问题。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104001.jpg?sign=1739324812-9iPwiYkOXxjLtNCNuRQhZsD6WnhAj52Q-0-a91727bdf5330222428d4fb0662929e0)
由此可见,在使用get方式传递数据时,需要使用如下所示的代码声明当前页的字符集。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104002.jpg?sign=1739324812-gjf9w17ziWffdnQgyFObbbguyaGtBI6P-0-3e1a9fe46fcd73667d307638770def14)
(3)在配置文件web.xml中配置ServletForGETMethod,具体实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104003.jpg?sign=1739324812-5KcneAMwt9JdEI9WdrsJTl9XvE0jsltz-0-22e129c3552a34cb431ca1ca1df559aa)
(4)打开Eclipse,新建一个名为“UserInformation”的Android工程。然后编写界面布局文件main.xml。
(5)编写业务类的实现文件UserInformationService.java,主要实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104004.jpg?sign=1739324812-Xam8D3sldZa2GNjCCoT4jAUnmmg8PY7d-0-ec17880f7dcddd339b4a041199fe771b)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00105001.jpg?sign=1739324812-FyB7GBhoiq6rjJfbVaQpFF0YdqbaMzEd-0-a6688375926483fa08f9c7f843e398bd)
(6)编写配置文件AndroidManifest.xml,申明网络访问权限,主要代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00105002.jpg?sign=1739324812-F4N6sNzrud485dOrmvz9EUirGVpqW6Wy-0-949f1e277c3def9b27d7802035b252dd)
到此为止,整个实例已讲解完毕,执行后的效果如图4-9所示。输入用户名和年龄后单击“save”按钮,会将输入的数据上传至服务器。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00106001.jpg?sign=1739324812-kMhkan0xtDgKoCtQ6204ho8zYLijQsbd-0-1d88489b33c579b9a930e27685749537)
图4-9 执行效果