![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=1738881277-HEvHaFo4PFj5K9HscD3MJNzzpdTdSUl3-0-01e60c6f34f10a5ff9b9ef03d8aff343)
编写主程序文件chuan.java,其具体实现流程如下所示。
● 分别声明变量newName、uploadFile和actionUrl,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100002.jpg?sign=1738881277-KNItDwitszAxkmwnWJwk9nO6i2fYEdjh-0-1922ca926ebb0a01af76dd4899079c9e)
● 通过mText1对象获取文件路径,根据mText2设置上传网址,单击按钮后调用上传方法uploadFile()。具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00100003.jpg?sign=1738881277-J5IVD7CWC1ECxUx3Az5gciXjkHdnuMVa-0-56f5c3267e5f2a69bd4f06e298b76450)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00101001.jpg?sign=1738881277-m1EsfcoErIDMib99VF9kDHMPjtR43ldN-0-8ba5a5db3e60bf5cb8db84a1eb97c395)
● 定义方法uploadFile()将文件上传至Server,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00101002.jpg?sign=1738881277-tPgMNexA07BpTgbihnGZKGkIcFF1G8WW-0-cf607c4ff482da98fe544ed82ea25415)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102001.jpg?sign=1738881277-79lUb7REp3qaKv0mhtwWEd3ah5Gh3doJ-0-3698e51c5fc31888a3d7c3874da4c34d)
● 定义方法showDialog(String mess)来显示提示对话框,具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102002.jpg?sign=1738881277-8owyouC3xQLgG7hswvqWVNLM9IEHfIlA-0-9217d5f77e75433085ea3cb672cf36ec)
执行后单击“上传”按钮可以将指定的文件上传到服务器,如图4-8所示。
4.4.2 使用GET方式上传数据
在Andorid系统中可以通过GET方式或POST方式上传数据,两者的具体区别如下所示。
● GET上传的数据一般是很小的并且安全性能不高的数据。
● POST上传的数据适用于数据量大,数据类型复杂,数据安全性能要求高的地方。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00102003.jpg?sign=1738881277-VnxVVqzEpmUet6PIZ42uMjRofuYQ7Tcg-0-65ddefb821712b404f796ea65cdde85d)
图4-8 上传到服务器
在Android穿戴设备开发应用中,采用GET方式向服务器传递数据的基本步骤如下所示。
(1)利用Map集合对数据进行获取并进行数据处理,例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103001.jpg?sign=1738881277-RyaOjzG2AFFAphWfQithpZlbN5T0z2Y8-0-f9b79fd143e1cc4e82cf1d0f1d60d706)
(2)新建一个StringBuilder对象。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103002.jpg?sign=1738881277-x9PzDD9JvURTqATHNsFwUIy4nkBGLnXt-0-62af521d13029f9972f200e820ca4cb0)
(3)新建一个HttpURLConnection的URL对象,打开连接并传递服务器的path。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103003.jpg?sign=1738881277-RlrJzVrQl44PzIyfsCyM91dQ2hXb6d5d-0-cd239b72f3feb7ae17bacc4269587ac9)
(4)设置超时和连接的方式。例如:
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103004.jpg?sign=1738881277-Yb1jHlcXL1ngWBkSgrZHwqecVYqzgVvr-0-28f6e2efd98fba661ccc40666f079f21)
在接下来的内容中将通过一个具体实例的实现过程介绍在Android穿戴设备中采用GET方式向服务器传递数据的基本方法。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103005.jpg?sign=1738881277-sTtajIDvGe0mEIsXgvkzErczCTHDLeuj-0-9ee67bf15e11741572222b75e82e4002)
本实例的具体实现流程如下所示。
(1)打开Eclipse,新建一个名为“ServerForGETMethod”的Web工程,并自动生成配置文件web.xml。
(2)创建一个名为ServletForGETMethod的Servlet,功能是接收并处理通过GET方式上传的数据。实现文件ServletForGETMethod.java的具体代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00103006.jpg?sign=1738881277-cbjFif429mAQoUnQWmAOuwiQLBLjiPZp-0-b219cb3a7899c18f4c5de6e2f4c7a5f3)
在上述代码中,为了避免出现中文乱码的问题,特意实现了ISO8854-1和UTF-8转换处理。请读者再看看下面的代码,很好的解决了乱码的问题。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104001.jpg?sign=1738881277-I7On3jE9jtrzMi7PVczzi1jWZZzHfXtp-0-ea93623dbf329d51fd0197b1086cedb6)
由此可见,在使用get方式传递数据时,需要使用如下所示的代码声明当前页的字符集。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104002.jpg?sign=1738881277-HJGAR38oeyQwcOyPJOTxsDzkg7VfXDKD-0-9d31b606b75d98b8d9fbd50960062904)
(3)在配置文件web.xml中配置ServletForGETMethod,具体实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104003.jpg?sign=1738881277-egVUANjQiIqt24E5wJSabgkpvrH0fkK3-0-403f6b64615055d62452465ffe253d52)
(4)打开Eclipse,新建一个名为“UserInformation”的Android工程。然后编写界面布局文件main.xml。
(5)编写业务类的实现文件UserInformationService.java,主要实现代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00104004.jpg?sign=1738881277-yWms1I1PYA8wYTh54N5ifJQkEhDAg57Y-0-f412db0b12a54fe3c264621797b502ed)
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00105001.jpg?sign=1738881277-Zb9TS0S9Kc6C3b5ynr1TMjGetKGygNqk-0-3a65c0319a8b0273bfc8505e02e4fbb0)
(6)编写配置文件AndroidManifest.xml,申明网络访问权限,主要代码如下所示。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00105002.jpg?sign=1738881277-aLS13VoSL1ua10D7yGSxYinHLmARg2wm-0-f9aca74dee86398db011965c9b1cdd3c)
到此为止,整个实例已讲解完毕,执行后的效果如图4-9所示。输入用户名和年龄后单击“save”按钮,会将输入的数据上传至服务器。
![](https://epubservercos.yuewen.com/850D74/17180246404476806/epubprivate/OEBPS/Images/img00106001.jpg?sign=1738881277-e64PJ89QrS1X2QXENc0eOvJkTyqw98Zn-0-ec0f9e1213cb722dc8503423f4e1b02a)
图4-9 执行效果