我们在做ANDROID应用开发时,无非就两种,一种为单纯的C/S手机本地应用操作,一种就是通过网络操作,在手机本地应用操作相对来说是很简单的,但是要在网络上实现交互,这可能我需要学习与熟练更多的网路知识才能够做出比较好的在网络上进行交互的手机应用程序,下面,我就详细的为大家谈谈在通过ANDROID平台的客户端,我们怎么去与网络实现交互呢:
首先我们要知道在网络上实现交互,这也就关系到数据传输的问题,当然,只要有数据传输,就可能会考虑到数据格式问题,比如传输与接收端走的协议会不会出现乱码问题等,在这里,我首先讲讲关于比较平常的使用HTTP协议来对数据交互与处理的过程吧,简单的先看一个我们怎么通过网络来获取一张图片显示在手机自己的ANDROID手机上的小例子吧:首先我们需要通过手机的屏幕输入一个连接网络的路径地址, 如:http://img.blog.163.com/photo/HSBYOIG22ZqYMwn635TzkQ== /2272066012008814682.jpg,然后把它设置进对二进制流处理的方法里:byte[] datas = getImage(path),在这个方法我们是这样做:public static byte[] getImage(String path){首先我们要实例一个网络对象,即URL匹配地址:URL url = new URL(path);然后打开它:url.openConnection();并使用一个类似于浏览器的HttpURLConnection来对其连接:HttpURLConnection conn = url.openConnection();此时,我们似乎已经打开了对网络操作的通道,这时,我们需要去放入一些头参数信息对去请求校验:如连接超时信息:conn.setReadTimeOut(5);连接请求方式:conn.setRequestMethod("GET");在这里,由于我们只是发送请求头有信息,所以只需要使用GET方式方式就可以,有的人可能会有疑问,为什么不使用POST方式呢,这个我在后面会详细讲解到,当我们发送了这两个头信息后,我们要怎么知道我们的发送与连接是成功了的了,这是就需要网络服务对其做些反馈,然而网络服务是做了相应的返回对比信息的,如200是响应成功,404无服务文件等,还有一些相关的就请朋友之间去网络上查看一下了,在这里你可以使用HttpWatch工具对其详细查看的,如果有需要的朋友,可以在我的资源你下载,好了,我们就可以使用一个判断语句来得知服务的响应成功否:if(conn.getResponseCoed()==200){说明连接与响应成功,这时服务端就会通过网络以流的形式要求我们去就收,当然接收这个流,你可以对其包装接收也行,只不过都是你自己需要觉得做的事,自己想怎么做要看你自己的了,然而我们就直接以原始的二进制流来读取吧,当然,在这里我们需要考虑大一张图片可能比较大,所以需要使用缓冲的机制来读取,也就是把一部分线写入内存里,以链表的方式,想对去链表的头,后边的尾会有流继续写入,核心代码就是:InputStream inStream = conn.getInputStream();ByteArrayOutputStream outStream = new ByteArrayOutputStream();int len = 0;byte[] buffer = new byte[1024];while((len == inStream.readLine(buffer))!=-1){outStream.write(buffer,0,len);}}},获得了这个流的数据,我们该怎么显示在手机上呢,这其实很简单了,只是需要注意的是,格式问题,因为我们是以二进制流的方式读取获得的,所以我们保持时同样需要使用支持二进制格式的图片格式来接受与保存,如:byte[] datas = getImage();Bitmap bitmap = BitmapFactory.decoByteArray(data,0,data.length)来解码并以二进制位图来保存,这样据好做直接设置到显示图片的ImageView组件里就行了,这样可就实现了通过手机输入网络路径获取网络图片的全过程,这个过程其核心也就是使用了流缓冲机制,使其读取与显示过程更流畅,当然这只是一个简单网络操作,相对来说网络来操作不仅仅只是如此,在下来我们继续简单介绍一个例子,如网络源码查看器是在ANDROID 里是怎么实现的呢,其实与图片查看器的原理差不多,首先我们通过在ANDROID手机上使用EDITETEXT输入一个网络地址,即一个网络路径,然后在使用一个方法来单独处理这个路径的请求机制,同样我们可以使用URL来连接打开链接:url.openConnection();使用 HttpURLConnection去设置请求参数:conn.setReadTimeOut(5);conn.setRequestMethod("GET"),然后判断响应信息:conn.setResponseCode == 200的话就说明我们请求成功,并可以开始对接流的传输信息了,也就是说服务端的流已经对你打开了一个通道允许你去读取,这时候,你就可以使用 conn.getInputStream()来获取流,当然这是是以二进制方式传递的,为了接收方便,同样以二进制来接收:byte[] datas = conn.getInputStream();如果你以上面的方式直接操作的话,那就糟糕了,还是使用一个缓冲流的机制来做吧:ByteArrayOutputStream outStream = new ByteArrayOutStream();int len;byte[] buffer = new byte[1024];while((len = conn.getInputStream().read(buffer))!=-1) {outStream.write(buffer,0,len);},OK,这样就可以全权获得了你想要的流信息,以String方式进行保存起来吧:new String(datas,"gb2312"),记得不要忘了编码格式,不然会有乱码哦,最后保存进你的TEXTVIEW里面显示看看吧.我会时常上传一些源码,包括我们在这些内容中讲解的知识点,希望大家都能动手去实践一下,不然你的收获会很小的.....下一节,我继续以案例来讲解....
分享到:
相关推荐
总结来说,“Android 4.0 网络编程详解”这篇文档可能详细介绍了Android 4.0版本的网络API使用方法、网络通信的最佳实践、网络编程中常见的问题和解决方案等。献给所有对技术抱有好奇心和热情的软件工程师们,意味着...
在Android 4.0(Ice Cream Sandwich)系统中,网络编程是实现应用程序与远程服务器...同时,阅读和分析源码可以帮助我们更好地掌握Android网络编程的细节。记住,实践中遇到的问题和解决方案往往能提供最宝贵的学习经验。
《Android+Tomcat+MySql+jsp一万行代码无线点餐系统详解》 在现代餐饮行业中,技术的应用已经成为提升服务效率、优化客户体验的重要手段。本文将深入解析一个基于Android客户端、Tomcat服务器、MySQL数据库以及JSP...
1. **AndroidSchedulers**:调度器让开发者可以选择在哪个线程执行Observable的操作,如主线程、后台线程等,避免了Android UI线程阻塞的问题。 2. **生命周期管理**:通过`CompositeDisposable`或`...
1. **基本操作符**:RxJava 提供了一系列操作符,如 map、filter、reduce、concatMap、flatMap 等,它们可以对数据流进行转换、过滤、组合等操作,帮助开发者更精细地控制数据处理流程。 2. **线程控制**:在 ...
1. Android网络框架: - 在Android 4.0之前,网络编程多依赖于传统的Socket编程,Android提供了丰富的网络API,允许开发者使用这些API来完成客户端和服务器端的通信。 - Android 4.0中,网络编程的一个重要进步是...
此版本的Android系统,即Ice Cream Sandwich(冰淇淋三明治),带来了许多网络功能上的改进和新特性,使得开发者能够更高效、更安全地进行网络操作。 ### 1. Android 4.0网络编程基础 Android 4.0的网络编程主要...
资源名称:Android 4.0网络编程详解 内容简介:《Android 4.0网络编程详解》对Android 4.0网络编程中的XML形式,JSON操作,需要掌握的HTTP知识,数据下载/上传,Socket编程,浏览器开发,Android中软件界面设计新...
《Android 4.0网络编程详解》对Android 4.0网络编程中的XML形式,JSON操作,需要掌握的HTTP知识,数据下载/上传,Socket编程,浏览器开发,Android中软件界面设计新大陆——采用HTML设计软件界面,Android应用程序的...
《Android网络开发技术实战详解》是一本专注于Android平台网络编程的专著,旨在帮助开发者深入理解和实践Android应用程序中的网络通信技术。这本书详细介绍了如何在Android应用中实现各种网络功能,如HTTP请求、数据...
3. **第3章:Android网络下的XML解析和生成** - 使用XMLPullParser进行低级别、高效的XML解析。 - DOM和SAX解析器的比较与使用。 - 使用Gson或Jackson库将XML数据转换为Java对象。 - XML的生成,如使用...
5. **异步处理与线程管理**:由于Android主线程不支持长时间网络操作,因此理解如何在后台线程进行网络请求并更新UI至关重要。书中将涉及AsyncTask、Handler、Looper和ThreadPoolExecutor等异步处理机制,以保证应用...
《Android开发应用实战详解》是一本深度探讨Android应用程序开发的专著,旨在为开发者提供全面且深入的指导。这本书详细阐述了Android平台的基础知识、核心组件以及实际开发中的技巧和最佳实践,帮助读者从入门到...
2. **异步网络操作**:由于Android主线程不能执行长时间运行的任务,包括网络请求,否则会导致ANR(应用无响应)错误。因此,需要使用AsyncTask、IntentService、Handler/Looper、RxJava等异步模型来处理网络请求。 ...
本书"ANDROID 4.0网络编程详解代码"显然是为了帮助开发者理解和掌握如何在Android 4.0上进行高效的网络操作。 首先,我们要了解Android中的网络API,主要包括HttpURLConnection、HttpClient(已被弃用,但在Android...
此外,Android系统对网络操作有特定的限制,比如必须在主线程外执行网络操作,否则会触发`NetworkOnMainThreadException`。因此,通常我们会使用AsyncTask、IntentService或者Retrofit等异步框架来处理网络任务。 ...