![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=1739349963-GLG3F1xpbMCffdm4CdgyWPXK74oRmRT9-0-24fd2f557c379d91deda068293c92c84)
编写主程序文件chuan.java,其具体实现流程如下所示。
● 分别声明变量newName、uploadFile和actionUrl,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100002.jpg?sign=1739349963-RtCcJcR5oq8KOK4Qc8QxsjLJ9MqSAzDb-0-868bffd05ec88299ff5dddea9294ae7b)
● 通过mText1对象获取文件路径,根据mText2设置上传网址,单击按钮后调用上传方法uploadFile()。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100003.jpg?sign=1739349963-MbJ1zlJ3fIca9ApnJ1r9OffiHFr6cIjy-0-85c41a969c64305c36ea599e8d128bcf)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00101001.jpg?sign=1739349963-CvNnbqWlZfEUBYxDMZg89RkFuCCAV86L-0-e4d4d4ea5e71460f5aa42b8432cf9640)
● 定义方法uploadFile()将文件上传至Server,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00101002.jpg?sign=1739349963-Myc3NegPvxX7d7fjZ8RrmbtJLvTEO0BQ-0-b197ee802df2d923ae7365d2ee1812e1)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102001.jpg?sign=1739349963-mNwE6DSq7OWrOBgP7og3CfZ1YPpZrzg0-0-97495773a238b771f1f384cd601d7522)
● 定义方法showDialog(String mess)来显示提示对话框,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102002.jpg?sign=1739349963-WaIUZD4lIHJMcp6obFiBLj7o7j7UF5TH-0-552490fe2955c1ded70315d87c0a3ff0)
执行后单击“上传”按钮可以将指定的文件上传到服务器,如图4-8所示。
4.4.2 使用GET方式上传数据
在Andorid系统中可以通过GET方式或POST方式上传数据,两者的具体区别如下所示。
● GET上传的数据一般是很小的并且安全性能不高的数据。
● POST上传的数据适用于数据量大,数据类型复杂,数据安全性能要求高的地方。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102003.jpg?sign=1739349963-x8hF1x5jum1Nip2pyE6OYdWAwwE4sOjG-0-5e74810f30a68fd5f2ccf3c52ddedcfa)
图4-8 上传到服务器
在Android穿戴设备开发应用中,采用GET方式向服务器传递数据的基本步骤如下所示。
(1)利用Map集合对数据进行获取并进行数据处理,例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103001.jpg?sign=1739349963-iAerEuE7M0r3I547OenzAby0KTUYwtcp-0-a0acdb4232f8e4dde169459265b0b056)
(2)新建一个StringBuilder对象。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103002.jpg?sign=1739349963-LT8thKP9XqtElehbx9uwtqVd4kHpmY9O-0-4260f2e0d28f1dee70acc74141355da5)
(3)新建一个HttpURLConnection的URL对象,打开连接并传递服务器的path。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103003.jpg?sign=1739349963-c9KpnVYMmotmq3WsSyYSUmf62lRvlj4E-0-a01c88d9830fa7531fce30f9647f26f5)
(4)设置超时和连接的方式。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103004.jpg?sign=1739349963-hNtTUzddmWjsiufhkxct48tnIo63YHb7-0-ac88bd37d3b4dc91ad89428e583ec0ea)
在接下来的内容中将通过一个具体实例的实现过程介绍在Android穿戴设备中采用GET方式向服务器传递数据的基本方法。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103005.jpg?sign=1739349963-8xBYGluA1uJjXFUQBKmsOiI9NVRCSU0w-0-5a76f3fbd06a439c5e4088fc6c41e510)
本实例的具体实现流程如下所示。
(1)打开Eclipse,新建一个名为“ServerForGETMethod”的Web工程,并自动生成配置文件web.xml。
(2)创建一个名为ServletForGETMethod的Servlet,功能是接收并处理通过GET方式上传的数据。实现文件ServletForGETMethod.java的具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103006.jpg?sign=1739349963-gjplnOsRdBbB9AuoNFbfXj5MkHcVVvv8-0-855db930daed89909b4b61ff2a18742f)
在上述代码中,为了避免出现中文乱码的问题,特意实现了ISO8854-1和UTF-8转换处理。请读者再看看下面的代码,很好的解决了乱码的问题。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104001.jpg?sign=1739349963-W5AOjSs9iS1Rq8pf5gMemOda2D2cd7LZ-0-d02e7260f9d7fd517457b8a5850d0b14)
由此可见,在使用get方式传递数据时,需要使用如下所示的代码声明当前页的字符集。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104002.jpg?sign=1739349963-yC5WZYlEjM6FDciEKrzM0GZBoZP9NU77-0-7f50a9a9bf26f5bc8141756126923944)
(3)在配置文件web.xml中配置ServletForGETMethod,具体实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104003.jpg?sign=1739349963-Ey5dsive1IRI9u6r6mUlIlb88wOeERKK-0-8ceaa2bbdd6f4337fed0a1bcc5281b2f)
(4)打开Eclipse,新建一个名为“UserInformation”的Android工程。然后编写界面布局文件main.xml。
(5)编写业务类的实现文件UserInformationService.java,主要实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104004.jpg?sign=1739349963-IRGyODrRjtX3ixqITAnSLy61A9pofyeE-0-86a4cde8edbf4ae1c64241fccb44c600)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00105001.jpg?sign=1739349963-7HTFfzInY88fy2oYaNHrTrw4UaCtriJx-0-30806edced9ace89e1b4009ec5ae58dc)
(6)编写配置文件AndroidManifest.xml,申明网络访问权限,主要代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00105002.jpg?sign=1739349963-oKl6lK9rNcZDJVFnNg6l4a7BjyvN3z8W-0-ac89e7a294e683fc45901672640ab875)
到此为止,整个实例已讲解完毕,执行后的效果如图4-9所示。输入用户名和年龄后单击“save”按钮,会将输入的数据上传至服务器。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00106001.jpg?sign=1739349963-4x24yuu7n2KxkPiHwl4w7ARw6mlRs6bz-0-38f8aa6b667f8ed10bcae478809e4a55)
图4-9 执行效果