android 内容长度() return -1
android content Length() return -1
我从服务器下载文件。但是当我想要获取文件大小时总是 body.contentLength()
return -1 。有些方法可以用 HttpUrlConnection
解决这个问题,但是 ResponseBody
class 呢?
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();
}
经过一些研究和思考后,我做了一些技巧,只需像这样使用 HttpURLConnection 获取文件大小:
HttpURLConnection connection = (HttpURLConnection) new URL(path).openConnection();
connection.setRequestProperty("Accept-Encoding", "identity");
long fileSize = connection.getContentLength();
用这种方式不管你用什么方式下载文件,总能得到你喜欢的大小。
我从服务器下载文件。但是当我想要获取文件大小时总是 body.contentLength()
return -1 。有些方法可以用 HttpUrlConnection
解决这个问题,但是 ResponseBody
class 呢?
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();
}
经过一些研究和思考后,我做了一些技巧,只需像这样使用 HttpURLConnection 获取文件大小:
HttpURLConnection connection = (HttpURLConnection) new URL(path).openConnection();
connection.setRequestProperty("Accept-Encoding", "identity");
long fileSize = connection.getContentLength();
用这种方式不管你用什么方式下载文件,总能得到你喜欢的大小。