如何使用URLConnection.getContentLength()

时间:2015-04-07 19:30:43

标签: java android url static-methods non-static

所以我的程序有这个相当奇怪的问题。我尝试做的是检查URL的Content-Length,然后在非静态方法中使用此数字,并使用if-else语句连接其他类。但我的问题是,当我研究互联网以某种方式解决这个问题时,我可以使用这些静态方法来获取contentLength,它不适用于非静态。所以我尝试了但是我从来没有真正得到任何结果。我基本上尝试做的是在另一个类中使用static-method通过非静态方法调用类,我想这不应该是问题(或者应该?我不知道,因为我从来没有之前使用过静态方法。然后我使用此代码来确定更改日期的随机网页的contentLength:

    public static void main() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar c = Calendar.getInstance();
    c.setTime(new Date()); // Now use today date.
    c.add(Calendar.DATE, 1); // Adding 1 day
    String output = sdf.format(c.getTime());

    try {
        String urlStr = "http://www.sasintern.de/show_pdf.php?fn=" + output + ".pdf";
        URL url = new URL(urlStr);
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        int contentLength = httpConn.getContentLength();
        if (contentLength < 2000) {
            new NotWorkingActivity();
            System.out.println("unknown content length");
        } else {
            new download2Activity();
            System.out.println("content length: " + contentLength + " bytes");
        }
        InputStream inStream = httpConn.getInputStream();
        // now read data
        // ...

        // close connection
        httpConn.disconnect();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

之后,当确定页面大小小于2000字节时,它应该在另一个类中显示Toast,该页面不可用,但是当它更大时,它应该打开一个新类,正如你在else语句中看到的那样。 但它不起作用,我想我只是搞乱了静态方法。我对他们没有经验。对不起我可能犯的任何其他错误。如果我的问题有一个不同的解决方案,希望更容易理解和更好地使用,我将非常感激。

拜托,我需要帮助解决这个问题,希望你能理解我的目标。 在此先感谢:)

1 个答案:

答案 0 :(得分:1)

阅读手册

  

http://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html#getContentLength()   public int getContentLength()

     

返回content-length头字段的值。

并非所有资源都设置了Content-Length标头。因此,您需要获取输入流并读取所有字节,直到最后计算它们。