2015-11-05 7 views
0

Я использую UIL, и у меня проблема с размером изображения, которое всегда 512000 байт!Android Универсальный загрузчик изображений onProgressUpdate общее значение всегда 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.

EDIT1: значение текущего в onProgressUpdate является правильным и достигает конечного размера файла.

ответ

0

Это потому, что размер содержимого в заголовке пуст. Сервер должен помещать Content-Length в заголовок. Например, в php вы должны сделать это вручную:

<?php 
    $file = "image.jpg" 
    $size = filesize($file); 
    header("Content-Type: image/jpeg"); 
    header("Content-length: $size"); 
    readfile($file); 
?> 

 Смежные вопросы

  • Нет связанных вопросов^_^