gpt4 book ai didi

Android DownloadManager 因无法识别的原因 400 而失败(当文件名包含空格时?)

转载 作者:搜寻专家 更新时间:2023-11-01 07:52:53 25 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,我在其中使用 DownloadManager 下载文件。它能够成功下载某些文件(例如 JPEG、MP3),但对其他文件(例如 PDF)不成功。我不确定它与文件类型有关。我注册了一个 BroadcastReceiver 来帮助调试问题。在 onReceive() 回调中,我查询 DownloadManager 以找出失败的原因,但它只给出了“400”,这不是记录在案的原因。

这是我使用 DownloadManager 的方式:

DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(url);
request.setTitle(filename);
request.setDestinationInExternalPublicDir(folder, filename);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
manager.enqueue(request);

在 DownloadManager.STATUS_FAILED 上,这是我的调试代码:

DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor cursor = manager.query(query);
if(cursor.moveToFirst()){
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int reason = cursor.getInt(columnReason);
Log.e("App", reason);
// the value of reason is 400 which is not a valid DownloadManager.ERROR_*
}

reason 的值应该是常量 DownloadManager.ERROR_* 之一,但 400 不是。同样的事情发生在两个设备上:Galaxy Nexus (v4.3) 和 Nexus 9 (v5.1)。我在手机的浏览器上测试了 URL,并确认在应用程序之外也能正常工作。有谁知道发生了什么事?任何帮助将不胜感激。

谢谢

已编辑:我要下载的文件的文件名中有一个空格。我做了一些快速实验:从不起作用的文件中删除空格,向以前起作用的文件添加空间。看来它可能与包含空格的文件名有关。

已编辑:这就是我为解决问题所做的。我必须在服务器上对 URL 进行编码(URL 是 json 响应的一部分,所以我更改了响应)

url = URLEncoder.encode(url, "utf-8")

最佳答案

这个 400 原因是 HTTP 错误。引用文档:

Provides more detail on the status of the download. Its meaning depends on the value of COLUMN_STATUS. When COLUMN_STATUS is STATUS_FAILED, this indicates the type of error that occurred. If an HTTP error occurred, this will hold the HTTP status code as defined in RFC 2616. Otherwise, it will hold one of the ERROR_* constants. [...]

https://developer.android.com/reference/android/app/DownloadManager.html#COLUMN_REASON

这个 HTTP 错误意味着

400 Bad Request The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

如果您遇到其他 HTTP 错误,请查阅此页面了解它们的含义:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

关于Android DownloadManager 因无法识别的原因 400 而失败(当文件名包含空格时?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com