Android---网络交互之客户端请求服务端资源
2010-12-01 16:23
477 查看
最近那个茫然啊,工作不如意,感情不如意,感觉事事不顺,在android上又荒废了些时日。最近因为想做一个APK,主要涉及到网络方面的应用,所以也开始学习之前没怎么涉及到的模块。
今天实现要实现的其实很简单,通过网络获取服务端一个文件(可以是txt、png、mp3等等),因为之前是做c#开发的,所以操起老本行,模拟一个服务器,通过url去获取服务器的一个资源,就这么简单,所以大家千万千万不要被吓着,没有什么post请求、没有什么get请求,也就是说没有验证直接获取,所有这些post、get通通不涉及。
Android中实现网络连接提供了三种接口以供我们使用:
1、标准java.net.*接口
2、org.Apache.*接口
3、android.net.*接口
我的示例就是使用第一种接口来实现,来实现从服务器下载一个txt文档,我们要实现这个功能要通过几个步骤实现
1、在sdcard中创建一个文件,将网络流保存为txt的最终文本文件
2、实现网络连接,获取网络流,保存到sdcard中的txt文件中
3、新建线程下载服务器txt文档
4、模拟一个web服务器(C#)
第一步工作实现过程:首先验证sdcard状态(是否载入并且是否可以读写),其次获得(新建)文件目录和新建txt文件,最后初始化一个FileOutputStream对象,他就是实现从数据流到文件的关键纽带,还有sdcard操作权限。
参考:http://tdq222.javaeye.com/blog/701962
代码:
代码
代码
第二步工作内容实现过程:首先创建Url连接对象,其次配置连接属性(是否可以读取,连接超时、读取超时),最后打开连接获取数据流保存到文件,还有网络连接权限。参考:http://java-cofi.javaeye.com/blog/734185
代码:
代码
代码
第三步主要是为了不使下载资源时造成主UI堵塞
代码
第四步就简单了,新建一个网站提供一个链接就ok了例如:http://localhost:7643/WebSite1/data/test.txt
,但是有一点要注意,将
localhost换成10.0.2.2,这就是本机的意思吧(未确认),至此从服务器获取资源就实现了,打开DDMS中sdcard,把test.txt取出来,打开如图:
今天实现要实现的其实很简单,通过网络获取服务端一个文件(可以是txt、png、mp3等等),因为之前是做c#开发的,所以操起老本行,模拟一个服务器,通过url去获取服务器的一个资源,就这么简单,所以大家千万千万不要被吓着,没有什么post请求、没有什么get请求,也就是说没有验证直接获取,所有这些post、get通通不涉及。
Android中实现网络连接提供了三种接口以供我们使用:
1、标准java.net.*接口
2、org.Apache.*接口
3、android.net.*接口
我的示例就是使用第一种接口来实现,来实现从服务器下载一个txt文档,我们要实现这个功能要通过几个步骤实现
1、在sdcard中创建一个文件,将网络流保存为txt的最终文本文件
2、实现网络连接,获取网络流,保存到sdcard中的txt文件中
3、新建线程下载服务器txt文档
4、模拟一个web服务器(C#)
第一步工作实现过程:首先验证sdcard状态(是否载入并且是否可以读写),其次获得(新建)文件目录和新建txt文件,最后初始化一个FileOutputStream对象,他就是实现从数据流到文件的关键纽带,还有sdcard操作权限。
参考:http://tdq222.javaeye.com/blog/701962
代码:
代码
File dir = null ; File file = null ; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ Log.v( " tag " , " ---------create file " ); // 获得sdcard目录 dir = Environment.getExternalStorageDirectory(); // 在指定目录新建文件 file = new File(dir, " test.txt " ); } FileOutputStream fos = null ; try { fos = new FileOutputStream(file); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
代码
<!-- 在SDCard中创建与删除文件权限 --> < uses-permission android:name ="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 --> < uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" />
第二步工作内容实现过程:首先创建Url连接对象,其次配置连接属性(是否可以读取,连接超时、读取超时),最后打开连接获取数据流保存到文件,还有网络连接权限。参考:http://java-cofi.javaeye.com/blog/734185
代码:
代码
// 缓存 byte [] bf = new byte [ 8192 ]; int current = 0 ; try { // 创建一个URL对象 URL url = new URL(spec); // spec:资源连接地址 HttpURLConnection connect = (HttpURLConnection)url.openConnection(); // 从服务端下载Http资源,设置读取权限 connect.setDoInput( true ); // // 上传资源到服务端,设置写入权限 // connect.setDoOutput(true); // 设置连接服务器超时时间 connect.setConnectTimeout( 5 * 1000 ); // 设置从服务器读取数据超时时间 connect.setReadTimeout( 30 * 1000 ); // 获得网络连接状态码 int code = connect.getResponseCode(); // 判断是否连接成功(HttpURLConnection.HTTP_OK==200,0-200都属正常) if (code == HttpURLConnection.HTTP_OK){ // // 打开连接获取资源(不写也没关系,调用getInputStream()默认会打开连接 // connect.connect(); InputStream is = connect.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); while ((current = bis.read(bf)) !=- 1 ){ fos.write(bf, 0 , current); } bis.close(); fos.close(); // 断开连接 connect.disconnect(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
代码
<!-- 在SDCard中创建与删除文件权限 --> < uses-permission android:name ="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 --> < uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" />
第三步主要是为了不使下载资源时造成主UI堵塞
代码
private Handler handler = new Handler(){ public void handleMessage(Message msg){ // 提示用户下载完成 if (msg.what == 1 ){ Toast.makeText(Main. this , " down succes " , Toast.LENGTH_SHORT).show(); } else { Toast.makeText(Main. this , " down fail " , Toast.LENGTH_SHORT).show(); } super .handleMessage(msg); } }; @Override public void onClick(View v) { // TODO Auto-generated method stub Log.v( " tag " , " ------------onclick " ); // 开启下载线程 Thread thread = new Thread( new downThread()); thread.start(); } class downThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub // 下载资源 download(); Message msg = new Message(); msg.what = 1 ; handler.sendMessage(msg); } }
第四步就简单了,新建一个网站提供一个链接就ok了例如:http://localhost:7643/WebSite1/data/test.txt
,但是有一点要注意,将
localhost换成10.0.2.2,这就是本机的意思吧(未确认),至此从服务器获取资源就实现了,打开DDMS中sdcard,把test.txt取出来,打开如图:
相关文章推荐
- Android---网络交互之客户端请求服务端资源
- Android---网络交互之客户端请求服务端资源后续
- Android---网络交互之客户端请求服务端资源后续
- Android-网络交互之客户端请求服务端资源-stoneson的专栏-  -  棒槌网@Android开发论坛 - Powered by phpwind
- 用.Net打造一个移动客户端(Android/IOS)的服务端框架NHM(二)——“请求”“交互”与传输数据(服务器端)
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- Android客户端请求服务端资源(HttpURLConnection和输入流实现)
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- 黑马程序员_Java基础_网络编程_客户端服务端数据传输,交互,客户端请求服务原理,自定义浏览器,URL统一资源定位符
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互(转)
- Android作为客户端,PC作为服务端:实现网络通信
- android使用volley等网络资源请求时注意事项(*)
- android客户端给服务端发post请求
- android里的客户端请求服务端的3种方式
- 简单的Android服务端和客户端登录交互(服务端)
- android与服务端的的http请求数据交互
- android客户端与服务端交互的三种方式
- Android作为客户端,PC作为服务端:实现网络通信!