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);
?>