首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DownloadManager -理解ERROR_HTTP_DATA_ERROR

DownloadManager -理解ERROR_HTTP_DATA_ERROR
EN

Stack Overflow用户
提问于 2016-01-14 06:26:03
回答 3查看 5.1K关注 0票数 17

我的应用程序严重依赖于android DownloadManager组件来下载大约大小为3-10兆字节的文件。

当扩展(到数百万次下载)时,总体情况是清楚的:

~50%的下载由于错误而导致失败。

我是从谷歌分析公司得到这个信息的

根据文档,此错误代码表示:

当在HTTP级别上发生数据接收或处理错误时,值为COLUMN_REASON。

我发现这份文件内容不多。

那里有很多http错误。

在下载过程中,网络断开又如何呢?在所有下载的管理器重试尝试失败后,它还会触发ERROR_HTTP_DATA_ERROR错误吗?

如果有人能帮我理解,那就太好了:

  • 有没有任何方法可以从DownloadManager获得更多关于确切http错误的信息?
  • 下载管理器可以触发ERROR_HTTP_DATA_ERROR的最常见情况是什么?

值得一提的另一点是:当这个错误发生的时候--用户连接到WIFI网络(我将下载管理器设置为仅通过wifi下载)

请不要建议我不要使用下载管理器。我知道这个方案的优缺点。我把这个选择作为最后的手段。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-25 11:06:03

查看DownloadManager的来源 ERROR_HTTP_DATA_ERROR是由一个方法getErrorCode(int)返回的--这是确切的行:

代码语言:javascript
运行
复制
            case Downloads.Impl.STATUS_HTTP_DATA_ERROR:
            return ERROR_HTTP_DATA_ERROR;

android.provider.Downloads的状态在这里用DownloadManager类自己的常量在来源中屏蔽

代码语言:javascript
运行
复制
public static final int STATUS_HTTP_DATA_ERROR = 495;

现在,您必须了解导致HTTP 495的原因。在Google上搜索了一下后,我发现这个错误响应代码只与Google相关,并且通常是在从playstore下载应用程序时生成的。

fix建议Go to Settings - Apps- All- Download manager and Clear data.

因此,在总结我有限的研究之后,我认为这是一个与DownloadManager实现相关的底层问题,而不是一些网络或服务器问题,而且由于没有明确的解决方案/解决方案(我的朋友们也面临类似的情况),您应该尝试其他选择。

票数 11
EN

Stack Overflow用户

发布于 2016-01-21 13:19:01

下载管理器可以触发ERROR_HTTP_DATA_ERROR的最常见情况是什么?

没有看到任何代码,这是猜测的工作。从医生那里:

如果发生HTTP错误,这将保存RFC 2616中定义的HTTP状态代码。

这将为您提供一个标准http错误,您可以从中找到一个6.1.1状况代码和理由短语。如果你有数以百万计的下载,而且这些下载来自有限的网站,这可能是一个超出你的应用程序的问题,因为网站的服务器可能无法处理流量。

在下载过程中,网络断开又如何呢?

互联网连接问题可能导致;

代码语言:javascript
运行
复制
"408"  ; Section 10.4.9: Request Time-out

在所有下载的管理器重试尝试失败后,它还会触发ERROR_HTTP_DATA_ERROR错误吗?

有可能。若要抛出这种错误,则需要在应用程序与和/或试图和/或在网站上完成下载时出现问题。

有没有任何方法可以从DownloadManager获得更多关于确切http错误的信息?

除了使用try和捕捉并记录应用程序使用DownloadManager的相关方法中的错误外,当您收到此错误时,还可以测试和等待logcat,另一个选项是远程使用库或第三方工具获取已部署应用程序的远程错误日志记录和崩溃报告。

有许多第三方服务和库提供这一点,我以一个著名的开源库为例。

至于在线错误和崩溃日志记录,阿格拉是开源的,并提供了这个特性。这以前使用Google产品来自由存储报表,但是随着使用量的增加,Google已经撤回了这种支持,但是ACRA和其他提供商提供了一些功能,或者您可以管理自己的报告,但这可能会带来成本。

在应用程序代码中实现这一点相对简单,方法是创建一个类,通过扩展应用程序类并与应用程序一起启动来连接到应用程序中。

代码语言:javascript
运行
复制
import org.acra.*;
import org.acra.annotation.*;

@ReportsCrashes(
    formUri = "http://www.backendofyourchoice.com/reportpath"
)
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // The following line triggers the initialization of ACRA
        ACRA.init(this);
    }
}

您还需要设置后端报告,并且随着选项的增加,还提供了如何这样做的详细信息。更多细节可以在这里找到,BasicSetup

这个博客由奶酪工厂提供了一个详细的设置和其他选项的在线错误报告如何在您自己的主机上设置ACRA,一个Android应用程序崩溃跟踪系统

这将意味着您的应用程序的更新,但您将不得不这样做,反正从它的声音。

票数 6
EN

Stack Overflow用户

发布于 2016-01-21 13:32:03

很难确切地说出你所犯错误的原因。您收到的错误代码太笼统了。

为了解决这个问题,我会做些什么:

  1. 尝试查看服务器负载或服务器活动与下载失败次数之间是否存在关联。这将有助于确定问题是否源于服务器。如果是这样的话--您可以增加服务器端的资源,或者设法减少服务器上的负载,以尽量减少与下载相关的问题。大量的服务器负载或大量并发下载可能会导致类似您正在进行的问题(瓶颈、超时、服务器端的锁定资源等)。
  2. 如果您得出结论,您的问题在客户端-我会考虑用另一个替代Android下载管理器或编写您的原代码下载文件。

我不得不说,Yvette女士提出增加更多的日志记录是很重要的。我在我所有的应用程序中都这么做。一旦你发布了更多关于这个问题的信息,我们就能更快地指出问题并解决它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34782965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档