借力使力不费力——文件下载篇

1。Nohttp下载(如果不清楚基本使用或不了解自己解决)

package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.download.DownloadListener;
import com.download.FileDownloader;
import com.example.administrator.myplayerdemo.AppConfig;
import com.example.administrator.myplayerdemo.R;
import com.example.administrator.myplayerdemo.fileutils.AppUtils;
import com.yanzhenjie.nohttp.Headers;
import com.yanzhenjie.nohttp.Logger;
import com.yanzhenjie.nohttp.NoHttp;
import com.yanzhenjie.nohttp.download.DownloadRequest;
import com.yanzhenjie.nohttp.error.NetworkError;
import com.yanzhenjie.nohttp.error.ServerError;
import com.yanzhenjie.nohttp.error.StorageReadWriteError;
import com.yanzhenjie.nohttp.error.StorageSpaceNotEnoughError;
import com.yanzhenjie.nohttp.error.TimeoutError;
import com.yanzhenjie.nohttp.error.URLError;
import com.yanzhenjie.nohttp.error.UnKnownHostError;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Locale;

import io.netopen.hotbitmapgg.library.view.RingProgressBar;

/**
* Created by Administrator on 2017/3/27 0027.
* 文件下载的demo
* 注意Nohttp下载必须在真机上测试
*/
public class FileDownappDemo extends Activity implements View.OnClickListener {
private Button btn;
//private ProgressBar pb;
private RingProgressBar pd;
// private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.filedemo);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
// pb= (ProgressBar) findViewById(R.id.pb_progress);
pd= (RingProgressBar) findViewById(R.id.progress_bar_2);
// tv_result= (TextView) findViewById(R.id.tv_result);
}

public void downapp(){
  checkVersion("http://api.nohttp.net/download/1.apk");
}
/**
 * 检查版本更新
 * @param app_upload_url
 */
private void checkVersion(String app_upload_url) {
    DownloadRequest downloadRequest = NoHttp.createDownloadRequest(
            app_upload_url, AppConfig.getInstance().APP_PATH_ROOT, "w.apk", true, true);
    NoHttp.getDownloadQueueInstance().add(0, downloadRequest, downloadListener);

} private final static String PROGRESS_KEY = “download_single_progress”;
/**
* 下载监听
*/
private com.yanzhenjie.nohttp.download.DownloadListener downloadListener = new com.yanzhenjie.nohttp.download.DownloadListener() {

    @Override
    public void onStart(int what, boolean isResume, long beforeLength, Headers headers, long allCount) {
        int progress = AppConfig.getInstance().getInt(PROGRESS_KEY, 0);
        if (allCount != 0) {
            progress = (int) (beforeLength * 100 / allCount);
           // pb.setProgress(progress);
            pd.setProgress(progress);
        }
        updateProgress(progress, 0);


    }

    @Override
    public void onDownloadError(int what, Exception exception) {
        Log.i("gsc",exception.getMessage());


    }

    @Override
    public void onProgress(int what, int progress, long fileCount, long speed) {
        updateProgress(progress, speed);
       pd.setProgress(progress);
        AppConfig.getInstance().putInt(PROGRESS_KEY, progress);
    }

    @Override
    public void onFinish(int what, String filePath) {
        Logger.d("Download finish, file path: " + filePath);

    }

    @Override
    public void onCancel(int what) {

    }

    private void updateProgress(int progress, long speed) {
        double newSpeed = speed / 1024D;
        DecimalFormat decimalFormat = new DecimalFormat("###0.00");
        String sProgress = getString(R.string.download_progress);
        sProgress = String.format(Locale.getDefault(), sProgress, progress, decimalFormat.format(newSpeed));
        //tv_result.setText(sProgress);
    }
};

@Override
public void onClick(View v) {
    // 先判断是否有权限。
    if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        // 有权限,直接do anything.
        downapp();
    } else {
        // 申请权限。
        AndPermission.with(this)
                .requestCode(100)
                .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .send();
    }


}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。
    AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionYes(100)
private void getLocationYes(List<String> grantedPermissions) {
    // TODO 申请权限成功。
    downapp();
}
// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionNo(100)
private void getLocationNo(List<String> deniedPermissions) {
    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
        // 第一种:用默认的提示语。
        //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show();
        Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show();
    }
}

}

2.Xutils 3下载

package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.administrator.myplayerdemo.R;
import com.example.administrator.myplayerdemo.fileutils.AppUtils;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Locale;

import io.netopen.hotbitmapgg.library.view.RingProgressBar;
import is.arontibo.library.ElasticDownloadView;

/**
* Created by Administrator on 2017/3/27 0027.
*/
public class FileDownappXutilsDemo extends Activity implements View.OnClickListener {
private Button btn;
private RingProgressBar pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xuils3);
    btn= (Button) findViewById(R.id.btn);

    pd= (RingProgressBar) findViewById(R.id.progress_bar_2);
    btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
    // 先判断是否有权限。
    if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        // 有权限,直接do anything.
        dapp();
    } else {
        // 申请权限。
        AndPermission.with(this)
                .requestCode(100)
                .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .send();
    }

}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。
    AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionYes(100)
private void getLocationYes(List<String> grantedPermissions) {
    // TODO 申请权限成功。
   dapp();
}
// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionNo(100)
private void getLocationNo(List<String> deniedPermissions) {
    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
        // 第一种:用默认的提示语。
        //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show();
        Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show();
    }
}
private void dapp() {
    RequestParams params = new RequestParams("http://api.nohttp.net/download/1.apk");
    params.setAutoRename(true);//断点下载
    params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/demo.apk");
    x.http().get(params, new Callback.ProgressCallback<File>() {

        @Override
        public void onSuccess(File result) {
           ;  Log.i("xutils","onSuccess"+result.getAbsolutePath());
            //pd.dismiss();

            AppUtils.installapp(FileDownappXutilsDemo.this,result.getPath());

        }
        @Override
        public void onError(Throwable ex, boolean isOnCallback) {
            Log.i("xutils","onError");
        }
        @Override
        public void onCancelled(CancelledException cex) {
            Log.i("xutils","onCancelled");
        }
        @Override
        public void onFinished() {

// pd.dismiss();
// Log.i(“xutils”,”onFinished()”);
}
@Override
public void onWaiting() {
Log.i(“xutils”,”onWaiting()”);
}
@Override
public void onStarted() {

// pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// pd.setProgressNumberFormat(“%1d b/%2d b”);
// pd.setTitle(“正在下载中..”);
// pd.setMessage(“请等待…..”);
//
// pd.show();
pd.setProgress(0);

        }
        @Override
        public void onLoading(long total, long current, boolean isDownloading) {
            pd.setProgress((int) (current));

// ev.setMax((int)total);
pd.setMax((int)total);
DecimalFormat df2 = new DecimalFormat(“###.00”);//这样为保持2位
System.out.println(“当前大小=”+df2.format(current/1024/1024));
System.out.println(“总共大小=”+df2.format(total/1024/1024));
// float f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
// b = new BigDecimal( (float) total);
// float v = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();

           // pd.setProgress((int)current);
        }
    });
}

}

3.OKGO下载

package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.example.administrator.myplayerdemo.R;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;

import java.io.File;
import java.util.List;

import io.netopen.hotbitmapgg.library.view.RingProgressBar;
import okhttp3.Call;
import okhttp3.Request;
import okhttp3.Response;
/**
* Created by Administrator on 2017/3/29 0029.
*/
public class FileDownappOKGODemo extends Activity {
private ProgressBar rb;
private RingProgressBar b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.okgo);
rb= (ProgressBar) findViewById(R.id.pb);
b= (RingProgressBar) findViewById(R.id.progress_bar_2);
}
public void downapp(View view){
// 先判断是否有权限。
if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 有权限,直接do anything.
downApp();
} else {
// 申请权限。
AndPermission.with(this)
.requestCode(100)
.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.send();
}

}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。
    AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionYes(100)
private void getLocationYes(List<String> grantedPermissions) {
    // TODO 申请权限成功。
    downApp();
}
// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionNo(100)
private void getLocationNo(List<String> deniedPermissions) {
    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
        // 第一种:用默认的提示语。
        //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show();
        Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show();
    }
}
private void downApp() {
    OkGo.get("http://api.nohttp.net/download/1.apk")//
            .tag(this)//
            .execute(new FileCallback() {  //文件下载时,可以指定下载的文件目录和文件名
                @Override
                public void onSuccess(File file, Call call, Response response) {
                    // file 即为文件数据,文件保存在指定目录
                    String absolutePath = file.getAbsolutePath();
                    Log.i("gsc","下载成功!"+absolutePath);
                }
                @Override
                public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                    //这里回调下载进度(该回调在主线程,可以直接更新ui)
                 rb.setProgress((int) currentSize);

                    rb.setMax((int) totalSize);
                    b.setProgress((int) currentSize);

                    b.setMax((int) totalSize);
                }
            });
}

}

FileDownloader(star 超过3000的开源项目)地址:https://github.com/gsc1234567890woshishui/FileDownloader

package com.example.administrator.myplayerdemo.activitys;
import android.Manifest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.example.administrator.myplayerdemo.AppConfig;
import com.example.administrator.myplayerdemo.R;

import com.example.administrator.myplayerdemo.fileutils.AppUtils;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.FileDownloadListener;
import com.liulishuo.filedownloader.FileDownloader;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;

import java.io.File;
import java.util.List;

import io.netopen.hotbitmapgg.library.view.RingProgressBar;
import okhttp3.Call;
import okhttp3.Response;

/**
* Created by Administrator on 2017/3/30 0030.
*/
public class FileDownDemo extends Activity implements View.OnClickListener {

private RingProgressBar b;
private Button but,btn_stop;
private BaseDownloadTask baseDownloadTask;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.filedemo);
    b= (RingProgressBar) findViewById(R.id.progress_bar_2);
    but= (Button) findViewById(R.id.btn);
    btn_stop= (Button) findViewById(R.id.btn_stop);
    btn_stop.setOnClickListener(this);
    but.setOnClickListener(this);
}
  @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。
    AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionYes(100)
private void getLocationYes(List<String> grantedPermissions) {
    // TODO 申请权限成功。
    downApp();
}
// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionNo(100)
private void getLocationNo(List<String> deniedPermissions) {
    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
        // 第一种:用默认的提示语。
        //AndPermission.defaultSettingDialog(this, REQUEST_CODE_SETTING).show();
        Toast.makeText(getApplicationContext(),"权限被拒绝....",Toast.LENGTH_LONG).show();
    }
}

private void downApp() {
   baseDownloadTask = FileDownloader.getImpl().create("http://api.nohttp.net/download/1.apk")
            .setPath(Environment.getExternalStorageDirectory() + "/app.apk", false).setForceReDownload(true)
            .setListener(new FileDownloadListener() {
                @Override
                protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {
                }

                @Override
                protected void connected(BaseDownloadTask task, String etag, boolean isContinue, int soFarBytes, int totalBytes) {

                }

                @Override
                protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
                    b.setProgress(soFarBytes);
                    b.setMax(totalBytes);

                }

                @Override
                protected void blockComplete(BaseDownloadTask task) {
                }

                @Override
                protected void retry(final BaseDownloadTask task, final Throwable ex, final int retryingTimes, final int soFarBytes) {
                }

                @Override
                protected void completed(BaseDownloadTask task) {
                    Log.i("gsc", "下载完成=" + task.getPath());
                    AppUtils.installapp(FileDownDemo.this, task.getPath());
                }

                @Override
                protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {
                }

                @Override
                protected void error(BaseDownloadTask task, Throwable e) {
                }

                @Override
                protected void warn(BaseDownloadTask task) {
                }
            });
    baseDownloadTask.start();

}

@Override
public void onClick(View v) {
    if (v.getId()==R.id.btn_stop){
        baseDownloadTask.pause();
    }
    if (v.getId()==R.id.btn){
        // 先判断是否有权限。
        if(AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            // 有权限,直接do anything.
            downApp();
        } else {
            // 申请权限。
            AndPermission.with(this)
                    .requestCode(100)
                    .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .send();
        }
    }

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
NoHttp 是专门做Android网络请求与下载的框架。支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载;支持304缓存,302/303重定向,支持代理服务器。NoHttp特性:支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载,上传下载均有进度。支持304缓存,自定义缓存,302/303重定向,支持代理服务器访问地址(如: Google)。NoHttp是队列,自动为请求排队,可以取消指定请求, 可以取消队列所有请求,亦可以停止队列。支持请求String、Bitmap、Json、JavaBean,可自定义扩展请求类型。Request对象包涵参数、文件、请求头等;Response对象包涵响应内容,响应头等信息,Cookie。使用Gradle构建时添加依赖:// 引用最新版 compile 'com.yolanda.nohttp:nohttp: ' // 或则引用指定版本 compile 'com.yolanda.nohttp:nohttp:1.0.0'一. 请求1.请求String数据// 请求对象 Request request = NoHttp.createStringRequest(url, requestMethod); //添加请求头 request.addHeader("AppVersioin", "2.0"); // 添加请求参数 request.add("userName", "yolanda"); //上传文件 request.add("file", new FileBinary(file)); ...2.请求Json数据// JsonObject Request request = NoHttp.createJsonObjectRequest(url, reqeustMethod); queue.add(what, request, responseListener); … // JsonArray Request request = NoHttp.createJsonArrayRequest(url, reqeustMethod); queue.add(what, request, responseListener);3. 请求Bitmap数据Request request = NoHttp.createImageRequest(url, requestMethod); ...4. 取消请求取消单个请求Request request = NoHttp.createStringRequest(url); ... request.cancel();从队列中取消指定的请求Request request = NoHttp.createStringRequest(url); request.setCancelSign(sign); … queue.cancelBySign(sign);取消队列中所有请求queue.cancelAll();停止队列RequestQueue queue = NoHttp.newRequestQueue(); ... queue.stop();5. 同步请求// 在当前线程发起请求,在线程这么使用 Request request = NoHttp.createStringRequest(url); Response response = NoHttp.startRequestSync(request); if (response.isSucceed()) {     // 请求成功 } else {     // 请求失败 }二. 缓存1. Http标准协议的缓存,比如响应码是304时现在很多公司使用了RESTFUL风格来写Http API,所以这个是必须有的。Request request = NoHttp.createJsonObjectRequest(url); // NoHttp本身是RESTFUL风格的标准Http协议,所以这里不用设置或者设置为DEFAULT request.setCacheMode(CacheMode.DEFAULT); ...2. 当请求服务器失败的时候,读取缓存Request request = NoHttp.createJsonObjectRequest(url); // 非标准Http协议,改变缓存模式为REQUEST_FAILED_READ_CACHE request.setCacheMode(CacheMode.REQUEST_FAILED_READ_CACHE); ...3. 如果发现有缓存直接成功,没有缓存才请求服务器我们知道ImageLoader的核心除了内存优化外,剩下一个就是发现把内地有图片则直接使用,没有则请求服务器,所以NoHttp这一点非常使用做一个ImageLoader。Request request = NoHttp.createJsonObjectRequest(url); // 非标准Http协议,改变缓存模式为IF_NONE_CACHE_REQUEST request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST); ...请求图片,缓存图片。// 如果没有缓存才去请求服务器,否则使用缓存,缓存图片演示 Request request = NoHttp.createImageRequest(imageUrl); request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST); ...4. 仅仅读取缓存Request request = NoHttp.createJsonObjectRequest(url); // 非标准Http协议,改变缓存模式为ONLY_READ_CACHE request.setCacheMode(CacheMode.ONLY_READ_CACHE); ...注意:缓存不管是String、Json、图片还是任何请求都可以被NoHttp缓存二、响应OnResponseListener responseListener = new OnResponseListener() {     @Override     public void onStart(int what) {         // 请求开始时,可以显示一个Dialog     }     @Override     public void onFinish(int what) {         // 请求接受时,关闭Dialog     }     @Override     public void onSucceed(int what, Response response) {         // 接受请求结果         String result = response.get();         // Bitmap imageHead = response.get(); // 如果是bitmap类型,都是同样的用法     }     @Override     public void onFailed(int what, String url, Object tag, Exception exception, ...) {         // 请求失败或者发生异常         // 这里根据exception处理不同的错误,比如超时、网络不好等     } };三. 自定义请求类型: FastJsonRequest1.定义请求对象public class FastJsonRequest extends RestRequestor { public FastJsonRequest(String url) {     super(url); } public FastJsonRequest(String url, RequestMethod requestMethod) {     super(url, requestMethod); } @Override public JSONObject parseResponse(String url, Headers headers, byte[] responseBody) {     String result = StringRequest.parseResponseString(url, headers, responseBody);     JSONObject jsonObject = null;     if (!TextUtils.isEmpty(result)) {         jsonObject = JSON.parseObject(result);     } else {         // 这里默认的错误可以定义为你们自己的数据格式         jsonObject = JSON.toJSON("{}");     }     return jsonObject; } @Override public String getAccept() {     // 告诉服务器你接受什么类型的数据, 会添加到请求头的Accept中     return "application/json;q=1"; } }2.使用自定义请求-和NoHttp默认请求没有区别Request mRequest = new FastJsonRequest(url, requestMethod); queue.add(what, mRequest, responseListener);五. 下载文件发起下载请求//下载文件 downloadRequest = NoHttp.createDownloadRequest(url, fielDir, fileName, true, false); // what 区分下载 // downloadRequest 下载请求对象 // downloadListener 下载监听 CallServer.getDownloadInstance().add(0, downloadRequest, downloadListener);暂停或者停止下载downloadRequest.cancel();监听下载过程private DownloadListener downloadListener = new DownloadListener() {     @Override     public void onStart(int what, boolean resume, long preLenght, Headers header, long count) {     }     @Override     public void onProgress(int what, int progress, long downCount) {         // 更新下载进度     }     @Override     public void onFinish(int what, String filePath) {     }     @Override     public void onDownloadError(int what, StatusCode code, CharSequence message) {     }     @Override     public void onCancel(int what) {     } }; 标签:NoHttp

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南一舟110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值