android内容Length()返回-1

时间:2018-03-07 09:25:09

标签: android android-studio retrofit2 content-length http-content-length

我从服务器下载文件。但是当我想要获得文件的大小总是body.contentLength()返回-1。某些方法可以通过HttpUrlConnection解决此问题,但ResponseBody类如何?

  private void initDownload(){

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://mobleh.com/").build();    
        RequestInterface requestInterface = retrofit.create(RequestInterface.class);    
        Call<ResponseBody> request = requestInterface.getAPK(path);

        try {    
            downloadFile(request.execute().body());

        } catch (IOException e) {

            e.printStackTrace();
            Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();

        }
    }

    private void downloadFile(ResponseBody body) throws IOException {

        int count;
        byte data[] = new byte[1024 * 4];            
        long fileSize = body.contentLength();

}

1 个答案:

答案 0 :(得分:0)

经过一些研究和思考后,我做了一些技巧,只需使用HttpURLConnection获取文件大小:

HttpURLConnection connection = (HttpURLConnection) new URL(path).openConnection();

    connection.setRequestProperty("Accept-Encoding", "identity");

long fileSize = connection.getContentLength();

用这种方式无论你下载文件的方式总是可以得到这样的大小。