在Application中初始化FileDownloader,然后我在验证密码后,这样设置FileDownloader,可是不成功,依然在控制台看到401错误,求大神打救!
FileDownloadHelper.OkHttpClientCustomMaker maker = new FileDownloadHelper.OkHttpClientCustomMaker() {
@Override
public OkHttpClient customMake() {
final OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(clientInfo.getUserName(), clientInfo.getPassword());
return response.request().newBuilder().header("Authorization", credential).build();
}
});
return builder.build();
}
};
FileDownloadHelper.setOkHttpClient(maker.customMake());
不能这样设置的。这样设置没有作用。因为FileDownloadHelper中的OkHttpClient在完成初始化以后就不再使用,你可以有以下方法可以带上对应头:
FileDownloader.init 的时候带上 OkHttpClientCustomMaker,在这里自定义okhttpClient。BaseDownloadTask#addHeader 的方法进行添加。对于第一种方法,FileDownloader.init是必须要在Application类里面初始化的是吧?如果这样的话,APP刚运行的时候还没开始验证username和password,就没法把username和password带
进自定义okhttpClient了。
对于第二种方法,我还是不太懂怎么把username和password作为参数传进去,例如username = "my_name" , password = "my_password", addHeader(String, String)这个方法是怎么使用的呢?
找到了
String credential = Credentials.basic(info.getUserName(), info.getPassword());
downloadTask.addHeader("Authorization", credential);
谢谢你的回复!
Hi, 我遇到了一个新的问题,我希望下载的时候无论如何都重新下载一遍,即使是文件保存路径与下载url都一样的情况下,我试了baseDownloadTask.setForceReDownload(true),但是貌似没有作用,还是回调到了void warn(BaseDownloadTask task)这个回调,文件没有重新被下载,我该怎样实现这个目的?
查看了#142这个issue, 发现情况是一样的,简单看了一下源码,可能是下载完成之后内部runnning列表里面没删除任务或者是列表没同步导致的?我切换回旧的版本 0.2.0 , 不会出现该问题。
抛 warn 是因为已经有了相同的 Path 与Url 正在下载过程中, 因为对于这样的任务出现大于1个是没有意义的,简单的理解就是 对同一个文件持有两个句柄进行写入同一个文件,这个是不允许的。
而 setForceReDownload(true) 作用是:如果这个文件已经下载过了,并且已经下载完成了。这时候不会直接返回完成,会重头开始下载。
我理解你说的意思,但是我的文件已经下载完成了的,complete()回调已经调用而且在本地能看到完整文件,这时候再重新下载,会出现上述情况,FileDownloader会认为task仍在下载,所以抛 warn
@244317809 多谢你的issue,我单独提一个issue跟这个bug吧。
@244317809 #169