通过接口返回数据下载文件的两种返回数据类型方法

/** 下载pdf文件 */    private String updateContentName;//文件名    private Call call;    private boolean isSuccess = true;//是否下载成功    File target = null;

protected void download(String downloadUrl) {        showLoading();

target = new File(Environment.getExternalStorageDirectory() + "/ZyHealthy/PDF", updateContentName);        if (!target.getParentFile().exists()) {            target.getParentFile().mkdirs();        }

OkHttpClient client = new OkHttpClient();        //构造请求        FormBody body = new FormBody.Builder()                .build();        final Request request1 = new Request.Builder()                .url(downloadUrl)                .post(body)                .build();

//包装Response使其支持进度回调        call = ProgressHelper.addProgressResponseListener(client, uiProgressResponseListener).newCall(request1);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                DesityUtil.showToast("下载失败,请尝试重新下载"+e);                closeLoading();            }

@Override            public void onResponse(Call call, Response response) throws IOException {

//                //方案一 String型的byte数组//                int n = 1024;//                String bodyStr = response.body().string();//                try {//                    String decodedString = new String(Base64Utils.decode(bodyStr));//                    byte[] bytes = gson.fromJson(decodedString, new TypeToken<byte []>(){}.getType());//                    FileOutputStream fos  = new FileOutputStream(target, true);//                    int length = bytes.length;//                    int start = 0;//                    while (length > start+n) {//                        fos.write(bytes, start, n);//                        start = start+n;//                    }//                    if (length != start+n) {//                        n = length-start;//                        fos.write(bytes, start, n);//                    }//                    fos.flush();//                    fos.close();//                } catch (Exception e) {//                    e.printStackTrace();//                }

//方案二 io流                InputStream is = response.body().byteStream();                FileOutputStream fos = new FileOutputStream(target, true);                byte[] buffer = new byte[2048];//缓冲数组2kB                int len;                while ((len = is.read(buffer)) != -1) {                    fos.write(buffer, 0, len);                }                fos.flush();                is.close();                fos.close();

closeLoading();

if (target.exists()) {                    dialogFragment = new PromptDialogFragment();                    dialogFragment                            .setTitle(getResources().getString(R.string.tjbb_exportPDF) + "  /ZyHealthy/PDF/" + updateContentName)                            .setMissVisibility(View.GONE)                            .setSureOnClickListener(new NoDoubleClickListener() {

@Override                                protected void onNoDoubleClick(View v) {                                    dialogFragment.dismiss();                                }                            });                    dialogFragment.show(getFragmentManager(), "FullScreenDownPDFFragment");                } else {                    DesityUtil.showToast("下载失败,请尝试重新下载");                }            }        });    }

//这个是ui线程回调,可直接操作UI    PromptDialogFragment dialogFragment;    UIProgressListener uiProgressResponseListener = new UIProgressListener() {        @Override        public void onUIProgress(long bytesRead, long contentLength, boolean done) {            isSuccess = done;            NumberFormat formatter = new DecimalFormat("00.#");//            String format = formatter.format(Float.valueOf(bytesRead) / contentLength * 100);            // 下载完成 弹框提示            if (100 <= (Float.valueOf(bytesRead) / contentLength * 100)) {//                DesityUtil.showToast("下载完成");            }        }

@Override        public void onUIStart(long bytesRead, long contentLength, boolean done) {            super.onUIStart(bytesRead, contentLength, done);        }

@Override        public void onUIFinish(long bytesRead, long contentLength, boolean done) {            super.onUIFinish(bytesRead, contentLength, done);            isSuccess = done;        }    };

public void showLoading() {        if (loadingFragment != null)            loadingFragment.show(getFragmentManager(), "loading");    }

public void closeLoading() {        if (loadingFragment != null)            loadingFragment.dismiss();    }
时间: 2024-08-07 08:40:01

通过接口返回数据下载文件的两种返回数据类型方法的相关文章

PHP下载文件的两种方法

PHP下载文件的两种方法与代码分享 转自:http://www.cnblogs.com/cfinder010/p/3197195.html PHP实现下载文件的两种方法.分享下,有用到的朋友看看哦. 方法一: <?php /** * 下载文件 * header函数 **/header('Content-Description: File Transfer');header('Content-Type: application/octet-stream');header('Content-Disp

从网络上下载文件的两种方法

两种方法使用的Com函数都来源于UrlMon,记得先引用. 一.URLDownloadToFile 直接下载文件到磁盘,URLDownloadToFile声明如下: function URLDownloadToFile(    Caller: IUnknown;     URL: PWideChar;           { 下载的路径 }    FileName: PWideChar;   { 保存到的路径 }    Reserved: DWORD;    StatusCB: IBindSta

linux远程下载文件 的两种方法之 ftp命令和scp命令

ftp命令: 服务器有安装ftp Server,另外一台linux可以使用ftp的client程序来进行文件的拷贝读取和下载. 1. 连接ftp服务器  格式:ftp [hostname| ip-address] a)在linux命令行下输入:ftp 192.168.26.66 b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可. 2. 下载文件 下载文件通常用get和mget这两条命令. a) get  格式:get [remote-file] [local-file] 将

Linux远程下载文件的两种方法之 ftp命令和scp命令

ftp命令: 服务器有安装ftp Server,另外一台linux可以使用ftp的client程序来进行文件的拷贝读取和下载. 1. 连接ftp服务器  格式:ftp [hostname| ip-address] a)在linux命令行下输入:ftp 192.168.26.66 b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可. 2. 下载文件 下载文件通常用get和mget这两条命令. a) get  格式:get [remote-file] [local-file] 将

C语言复制文件的两种简单的方法【从根本解决问题】

网上的方法大致有这样几种: 1.使用操作系统提供的复制文件的API 2.使用C语言本身提供的复制文件的函数 3.直接读写文件,从文件角度来操作,从而直接将一个文件复制 这里我们使用的就是这第三种. 复制文件的思路大概是这样的,如果是文本类型,则可直接使用字符读写的方式,依次读写到另一个文件中.但如果是非字符型文件那应该怎么进行操作呢?我的方法是使用二进制形式打开,然后依次针对字节进行操作,依次从文件第一个字节读写至最后一个字节实现文件的复制,那么由此可得,这种方法同样可以用在远程的操作上,即实现

C++服务器下载文件的两种方式

#include <afxinet.h>#include "wininet.h" #pragma comment( lib, "wininet.lib" ) string remoteIP = "http://www.test.com:8001"; string testIP = getDomain("IP"); string testPort = getDomain("PORT"); if (

oracle rename数据文件的两种方法

oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报  分类: oracle(98)  版权声明:本文为博主原创文章,未经博主允许不得转载. 第一种 alter tablespace users rename datafile '==' to '***'; 这种方式需要数据库处于open状态,表空间在offline的状态下才能更改. [sql] view plain copy SQL> alter tablespace user

1.模块2.循环导入问题及解决思路3.区分py文件的两种类型4.模块的查找顺序5.模块的绝对导入与相对导入6.项目开发的目录规范

一.模块 什么是模块? 模块就是一系列功能的结合体 模块的三种来源: 1.内置的(python解释器自带的) 2.第三方的(别人写的) 3.自定义的(你自己写的) 模块的四种表现形式: 1.使用python编写的py文件(也就是意味着py文件也是可以称之为模块 2.已被编译为共享库或DLL的或C++扩展(了解) 3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用C编写并连接到Python解释器的内置模块 模块选择 1.用别人写好的模块(内置

GitHub常用上传文件的两种方法 附带常见的问题及Git安装教程

从早上下课到现在一直在琢磨如何给Gethub下载本地文件,中午饭都没吃.还好是解决了,感觉挺有成就感的.O(∩_∩)O哈哈~ 好哒 闲话不说,说重点. 一.git的安装 百度云:http://pan.baidu.com/s/1mhFy8Ik 打开后 点next 2.继续点next 3.继续点next 4.选第一行是默认windows使用 选第二行是Windows和Linux都可以 点next 5.可以不用管,选择默认就可以了 点next 6.安装成功后弹出 7 这时候你找到你的git文件夹,点击