Android客户端请求服务端资源(HttpURLConnection和输入流实现)

转载 2012年03月27日 21:06:22
今天实现要实现的其实很简单,通过网络获取服务端一个文件(可以是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 

Android手机SD卡创建文件并写入内容

在Android开发过程中,经常需要在手机中写入并存储一些文件,下面是写入文件代码部分,带注释可直接使用。/** * 写入文件方法 * @param content */...
  • Missueverday
  • Missueverday
  • 2015年08月14日 14:39
  • 3682

java 通过 URL 类和 URLConnection类 以及输入流实现文件下载功能

package udp; import java.net.* ; import javax.swing.* ; import java.awt.event.*; import java.io....
  • yue7603835
  • yue7603835
  • 2011年11月03日 22:30
  • 5365

URL输入流

除了基本的文件访问之外,Java技术提供了使用统一资源定位器(URL)来访问网络上的文件。当你使用Applet的getDocumentBase()方法来访问声音和图象时,你已经隐含地使用了URL对象。...
  • qq1712088151
  • qq1712088151
  • 2012年03月12日 11:11
  • 919

JAVA中三种URL连接方法

JAVA中三种URL连接方法 Java的网络类可以让你通过网络或者远程连接来实现应用。而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本...
  • acoolboy1984
  • acoolboy1984
  • 2007年10月27日 20:46
  • 32450

Android文件输出流和输入流操作

一、使用到的几个类  File:文件操作类 FileInputStream:文件输入流 FileOutPutStream:文件输出流 ByteArrayOutputStream:缓存输出流 二...
  • qq_25418387
  • qq_25418387
  • 2015年01月18日 14:38
  • 3541

http协议从客户端提交数据给服务器并返回数据

老罗视频学习。 本例从客户端提交数据给服务器,服务器接收到数据之后,看是否匹配,匹配返回字符串“login is success!”,失败返回“login is error!” 一...
  • u012702039
  • u012702039
  • 2015年01月01日 19:25
  • 1153

httpurlconnection使用post传值时web接口接收不到值

最近好久没有写博客了,因为上班的原因。今天想做一个点餐系统,移动版和服务器版。数据使用json数据进行传输。但是碰见一个难题就是如何让移动端将数据传输给服务器,然后进行更新到数据库。进入正题: ...
  • u013825231
  • u013825231
  • 2016年11月17日 22:30
  • 2504

Android SdCard 新建文件夹并在文件夹中读、写文件

首先你要获取SdCard的读写权限: 我们现在SdCard中新建一个文件夹:名字为 datas File sd = Environment.getExternalStor...
  • llp1992
  • llp1992
  • 2014年12月07日 13:32
  • 3695

android读写文件的实现(针对android4.4不能在sdcard根目录下创建文件夹)

sdcard的读操作 // public String loadFromSDFile(String fname) // { // String result=null; // try { /...
  • u014271612
  • u014271612
  • 2015年09月23日 11:34
  • 1907

HttpURLConnection从客户端向服务器发送Http请求以及服务器响应全过程解析

HttpURLConnection从客户端向服务器发送Http请求以及服务器响应全过程解析 下边的总结对我帮助蛮大的~不仅用法了解,整个连接流程也要明白! 原文链接地址:  ht...
  • Servlet905
  • Servlet905
  • 2017年08月31日 16:31
  • 406
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android客户端请求服务端资源(HttpURLConnection和输入流实现)
举报原因:
原因补充:

(最多只允许输入30个字)