今天实现要实现的其实很简单,通过网络获取服务端一个文件(可以是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取出来,打开如图:




从此学习网 http://www.congci.com/item/androidrequestres

更多相关文章

  1. Android最佳实践(八)之热修复方案
  2. Android文件命名规范初版
  3. Android(安卓)报错 - 无法解析类型 java.lang.Object。从必需的
  4. Android(安卓)4 通过 USB 连接扫描枪 获得扫描信息 解决扫描枪接
  5. Android(安卓)物联网socket通信采坑
  6. 9.5.3 Android(安卓)Apk 反编译 & 9.5.4 Android(安卓)Apk 加密
  7. Android权限设置引导
  8. Android(安卓)App 网络接入实时监控
  9. 动态化部署:Android热修复之代码修复(一)

随机推荐

  1. 守护进程通信之Socket
  2. android:layout_gravity 和 android:grav
  3. 移动互联网的新宠:Android之缤纷世界
  4. Android专利地雷曝光 中国粉丝忧虑情绪蔓
  5. Android(安卓)Makefile分析
  6. 移动互联网的新宠:Android之缤纷世界
  7. [置顶] 关于Android(安卓)NDK中如何调用
  8. 狂刷Android范例之5:ApiDemos主程序框架分
  9. 2010年Android随想!
  10. Android(安卓)面试题总结之Android(安卓)