Android DownloadManager : Download fails, 但 COLUMN_REASON 只返回 "placeholder"

标签 android download-manager

DownloadManager 似乎是在不稳定的移动互联网连接上进行大量后台下载的应用程序的正确选择。

使用在网络上找到的教程代码,该应用程序能够像这样从系统的 DM 请求下载:

// in onCreate()
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

// in requestData()
Uri u = Uri.parse("http://server:8000/feed/data");
Request dreq = new Request(u);
dreq.setNotificationVisibility(Request.VISIBILITY_HIDDEN);
downloadID = dm.enqueue(dreq);

该代码中的 URL 是本地计算机上的测试服务器。 URL 有效,Android 模拟器中的浏览器可以检索页面,当我的应用程序通过 DownloadManager 和上面引用的代码请求该页面时,服务器返回 HTTP 代码 200。

这是 ACTION_DOWNLOAD_COMPLETE BroadcastReceiver 中的相关代码,当 DM 检索到文件时会调用它。

Query q = new Query();
q.setFilterById(downloadID);
Log.i("handleData()", "Handling data");
Cursor c = dm.query(q);
if (c.moveToFirst()) {
  Log.i("handleData()", "Download ID: " + downloadID + " / " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_ID)));
  Log.i("handleData()", "Download Status: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)));
  if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
    String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
    Log.i("handleData()", "Download URI: " + uriString);
  } else if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) {
    Log.i("handleData()", "Reason: " + c.getString(c.getColumnIndex(DownloadManager.COLUMN_REASON)));
  }
}

奇怪的结果是这样的:

DOWNLOAD_STATUS 为 16(或 STATUS_FAILED),但原因是“占位符”。

这是为什么呢?服务器返回 200 状态码时为什么会失败?为什么DownloadManager没有给出原因?

最佳答案

在这里回答我自己。

问题来了:COLUMN_REASON 不是字符串,而是数字值。

Log.i("handleData()", "Reason: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON)));

将返回一个可以处理的实际错误代码。

关于Android DownloadManager : Download fails, 但 COLUMN_REASON 只返回 "placeholder",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12493306/

相关文章:

android - 您需要在创建 AlertDialog 时使用 Theme.AppCompat 主题

android - 单击按钮时更新 recyclerview

Android - 模板匹配

java - 如何在 Java 中从 Imgur API 获取图像

android - 下载管理器下载文件

Android 下载管理器和 SSL (https)

java - Android 下载管理器 - 无法知道下载的大小

java - 下载和运行 .apk 文件时出现解析错误

java - 如何在 Java 中读取 JSON 文件

iphone - ASIHTTPRequest 多个下载控制,如暂停、恢复