Java 在Android中下载getcontentlength()时返回-1
我正在开发一个Android应用程序,我正在下载一个文件,并在进度条中显示进度。为此,我需要知道文件的长度。但它返回-1。它与本地服务器配合良好。但一旦移动到live server,问题就开始了。所以任何人都可以帮我Java 在Android中下载getcontentlength()时返回-1,java,android,web-services,web-applications,download,Java,Android,Web Services,Web Applications,Download,我正在开发一个Android应用程序,我正在下载一个文件,并在进度条中显示进度。为此,我需要知道文件的长度。但它返回-1。它与本地服务器配合良好。但一旦移动到live server,问题就开始了。所以任何人都可以帮我 URL url = new URL("URL TO DOWNLOAD"); URLConnection conection = url.openConnection(); HttpURLConnection httpUrlConn = (HttpURLConnection) con
URL url = new URL("URL TO DOWNLOAD");
URLConnection conection = url.openConnection();
HttpURLConnection httpUrlConn = (HttpURLConnection) conection;
httpUrlConn.connect();
int fileLength = connection.getContentLength();
这里我得到的文件长度为-1。为什么会这样?有没有办法避免它并获得正确的长度?检查您的URL路径页面,我认为该页面上没有任何数据。阅读此 getContentLength()返回内容长度标题字段的值
此连接的URL引用的资源的内容长度,如果内容长度未知,则为-1。同样的事情也总是发生在我身上。这个-1真的把我们的进度条搞砸了,不是吗?你知道我是干什么的吗?我重命名该文件(是的,就在服务器上),然后将其重新更改。问题消失了。纯魔法。。。此外,还有一个快速而肮脏的解决方法:若您知道有问题的文件的精确长度,您可以简单地用该数字替换-1。是的,换一个就行了。例如,我的应用程序从我的个人网站下载文件,因此我100%确定这些文件已就位。我也知道它们的大小是一个字节。因此:
@Override
protected String doInBackground(String... aurl) {
int realLOF = 1234567890; // personally, I use an array element here
boolean badLOF = false;
try {
URL url = new URL(aurl[0]);
URLConnection connection = url.openConnection();
connection.connect();
int lengthOfFile = connection.getContentLength();
if (lengthOfFile == -1) {
lengthOfFile = realLOF; // yeah, I know. Unhealthy :(
badLOF = true;
}
Log.d("DL", "LOF: " + lengthOfFile + ", badLOF: " + badLOF);
// your DL logic here
} catch (Exception e) {
// whatever
}
return null;
}
// my app runs batch downloads so I made a recursive loop:
// DownloadFileAsync().execute(url) calls itself on onPostExecute(),
// and that's how badLOF resets itself.
当然,只有当您能够管理这些文件时,这种方法才会起作用。有趣的是,问题1)在相同的文件中重复出现,2)显然与文件大小本身无关:首先,它发生在大小文件(如100MB和1kB)上,其次,我只在HostMonster FileHoster上遇到过。不,我不是开什么车,我喜欢他们的服务质量。只是想知道如何修复断轴,仅此而已
HTH.如果相同的url通过java应用程序命中,则其工作正常。但它不适用于iphone和android。