Android Universal Image Loader onProgressUpdate 总值始终为 512000
Android Universal Image Loader onProgressUpdate total value always 512000
我正在使用 UIL,但图像大小始终为 512000 字节时遇到问题!
这是我的配置:
Options decodingOptions = new Options();
decodingOptions.inSampleSize = 1;
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(false)
.decodingOptions(decodingOptions)
.cacheOnDisk(true)
.considerExifParams(true)
.resetViewBeforeLoading(true)
.imageScaleType(ImageScaleType.NONE)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoaderConfiguration config;
config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.denyCacheImageMultipleSizesInMemory()
.build();
ImageLoader.getInstance().init(config);
我是这样使用它的:
ImageLoader.getInstance().loadImage(imgUrl, null, null, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
PB.setVisibility(View.VISIBLE);
PBText.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
PB.setVisibility(View.GONE);
PBText.setVisibility(View.GONE);
switch (failReason.getType()) {
case IO_ERROR:
message = mResources.getString(R.string.ioError);
break;
case OUT_OF_MEMORY:
message = mResources.getString(R.string.outOfMemory);
break;
case NETWORK_DENIED:
message = mResources.getString(R.string.networkDenied);
break;
case UNKNOWN:
message = mResources.getString(R.string.unknownError);
break;
case DECODING_ERROR:
message = mResources.getString(R.string.decodeError);
break;
}
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
PB.setVisibility(View.GONE);
PBText.setVisibility(View.GONE);
fullScreenImage.setImageBitmap(loadedImage);
}
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current,
int total) {
//here the value of total is always 512000!
if((total != 0)&&(current != 0)){
PB.setProgress(Math.round(100.0f * current / total));
}
PBText.setText((current/1024)+" KB / "+(total/1024)+" KB");
}
});
我正在发送来自 php 的图像:
header( 'Content-Type: image/jpg' );
readfile( $image_file );
之前还可以,现在不行了。我不知道为什么。
我正在使用最新的 Universal Image Loader jar。
EDIT1:onProgressUpdate 中的 current 值是正确的,它达到了文件的最终大小。
那是因为 header 中内容的大小为空。
服务器应将 Content-Length
放在 header 中。
例如,在 php 中,您应该像这样手动执行此操作:
<?php
$file = "image.jpg"
$size = filesize($file);
header("Content-Type: image/jpeg");
header("Content-length: $size");
readfile($file);
?>
我正在使用 UIL,但图像大小始终为 512000 字节时遇到问题!
这是我的配置:
Options decodingOptions = new Options();
decodingOptions.inSampleSize = 1;
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(false)
.decodingOptions(decodingOptions)
.cacheOnDisk(true)
.considerExifParams(true)
.resetViewBeforeLoading(true)
.imageScaleType(ImageScaleType.NONE)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoaderConfiguration config;
config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.denyCacheImageMultipleSizesInMemory()
.build();
ImageLoader.getInstance().init(config);
我是这样使用它的:
ImageLoader.getInstance().loadImage(imgUrl, null, null, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
PB.setVisibility(View.VISIBLE);
PBText.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
PB.setVisibility(View.GONE);
PBText.setVisibility(View.GONE);
switch (failReason.getType()) {
case IO_ERROR:
message = mResources.getString(R.string.ioError);
break;
case OUT_OF_MEMORY:
message = mResources.getString(R.string.outOfMemory);
break;
case NETWORK_DENIED:
message = mResources.getString(R.string.networkDenied);
break;
case UNKNOWN:
message = mResources.getString(R.string.unknownError);
break;
case DECODING_ERROR:
message = mResources.getString(R.string.decodeError);
break;
}
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
PB.setVisibility(View.GONE);
PBText.setVisibility(View.GONE);
fullScreenImage.setImageBitmap(loadedImage);
}
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current,
int total) {
//here the value of total is always 512000!
if((total != 0)&&(current != 0)){
PB.setProgress(Math.round(100.0f * current / total));
}
PBText.setText((current/1024)+" KB / "+(total/1024)+" KB");
}
});
我正在发送来自 php 的图像:
header( 'Content-Type: image/jpg' );
readfile( $image_file );
之前还可以,现在不行了。我不知道为什么。 我正在使用最新的 Universal Image Loader jar。
EDIT1:onProgressUpdate 中的 current 值是正确的,它达到了文件的最终大小。
那是因为 header 中内容的大小为空。
服务器应将 Content-Length
放在 header 中。
例如,在 php 中,您应该像这样手动执行此操作:
<?php
$file = "image.jpg"
$size = filesize($file);
header("Content-Type: image/jpeg");
header("Content-length: $size");
readfile($file);
?>