1

こんにちは、アプリに画像をダウンロードするために次のコードを書きました。

public class ImageDownloader
{
  private static final int DELAY_BEFORE_PURGE = 10000;
  private static final int HARD_CACHE_CAPACITY = 10;
  private static final String LOG_TAG = "ImageDownloader";
  @SuppressWarnings("unchecked")
private static final ConcurrentHashMap<String, SoftReference<Bitmap>> sSoftBitmapCache = new ConcurrentHashMap<String, SoftReference<Bitmap>>(5);
  private Mode1 mode = Mode1.CORRECT;
  private final Handler purgeHandler = new Handler();
  private final Runnable purger = new Runnable()
  {
    public void run()
    {
      ImageDownloader.this.clearCache();
    }
  };
  private final HashMap<String, Bitmap> sHardBitmapCache = new LinkedHashMap(5, 0.75F, true)
  {
    protected boolean removeEldestEntry(Map.Entry<String, Bitmap> paramAnonymousEntry)
    {
      if (size() > 10)
        ImageDownloader.sSoftBitmapCache.put((String)paramAnonymousEntry.getKey(), new SoftReference((Bitmap)paramAnonymousEntry.getValue()));
      for (boolean bool = true; ; bool = false)
        return bool;
    }
  };


private Bitmap localObject2;  private void addBitmapToCache(String paramString, Bitmap paramBitmap)
  {
    if (paramBitmap != null)
      synchronized (this.sHardBitmapCache)
      {
        this.sHardBitmapCache.put(paramString, paramBitmap);
      }
  }

  private static boolean cancelPotentialDownload(String paramString, ImageView paramImageView)
  {
    boolean bool = true;
    BitmapDownloaderTask localBitmapDownloaderTask = getBitmapDownloaderTask(paramImageView);
    if (localBitmapDownloaderTask != null)
    {
      String str = localBitmapDownloaderTask.url;
      if ((str != null) && (str.equals(paramString)))
        break label39;
      localBitmapDownloaderTask.cancel(bool);
    }
    while (true)
    {
      return bool;
      label39: bool = false;
    }
  }

  private void forceDownload(String paramString, ImageView paramImageView)
  {
    if (paramString == null)
      paramImageView.setImageDrawable(null);
    while (true)
    {
      return;
      if (cancelPotentialDownload(paramString, paramImageView))
        switch ($SWITCH_TABLE$org$fluturasymphony$recommendation$ImageDownloader$Mode()[this.mode.ordinal()])
        {
        default:
          break;
        case 1:
          Bitmap localBitmap = downloadBitmap(paramString);
          addBitmapToCache(paramString, localBitmap);
          paramImageView.setImageBitmap(localBitmap);
          break;
        case 2:
          paramImageView.setMinimumHeight(156);
          new BitmapDownloaderTask(paramImageView).execute(new String[] { paramString });
          break;
        case 3:
          BitmapDownloaderTask localBitmapDownloaderTask = new BitmapDownloaderTask(paramImageView);
          paramImageView.setImageDrawable(new DownloadedDrawable(localBitmapDownloaderTask));
          paramImageView.setMinimumHeight(156);
          localBitmapDownloaderTask.execute(new String[] { paramString });
        }
    }
  }

  private int[] $SWITCH_TABLE$org$fluturasymphony$recommendation$ImageDownloader$Mode() {
    // TODO Auto-generated method stub
    return null;
}

private static BitmapDownloaderTask getBitmapDownloaderTask(ImageView paramImageView)
  {
    Drawable localDrawable;
    if (paramImageView != null)
    {
      localDrawable = paramImageView.getDrawable();
      if (!(localDrawable instanceof DownloadedDrawable));
    }
    for (BitmapDownloaderTask localBitmapDownloaderTask = ((DownloadedDrawable)localDrawable).getBitmapDownloaderTask(); ; localBitmapDownloaderTask = null)
      return localBitmapDownloaderTask;
  }

  private Bitmap getBitmapFromCache(String paramString)
  {
    synchronized (this.sHardBitmapCache)
    {
      Bitmap localBitmap1 = (Bitmap)this.sHardBitmapCache.get(paramString);
      if (localBitmap1 != null)
      {
        this.sHardBitmapCache.remove(paramString);
        this.sHardBitmapCache.put(paramString, localBitmap1);
        localObject2 = localBitmap1;
      }
      else
      {
        SoftReference localSoftReference = (SoftReference)sSoftBitmapCache.get(paramString);
        if (localSoftReference != null)
        {
          Bitmap localBitmap2 = (Bitmap)localSoftReference.get();
          if (localBitmap2 != null)
            localObject2 = localBitmap2;
        }
      }
    }
    sSoftBitmapCache.remove(paramString);
    Object localObject2 = null;
    return (Bitmap) localObject2;
  }

  private void resetPurgeTimer()
  {
    this.purgeHandler.removeCallbacks(this.purger);
    this.purgeHandler.postDelayed(this.purger, 10000L);
  }

  public void clearCache()
  {
    this.sHardBitmapCache.clear();
    sSoftBitmapCache.clear();
  }

  public void download(String paramString, ImageView paramImageView)
  {
    resetPurgeTimer();
    Bitmap localBitmap = getBitmapFromCache(paramString);
    if (localBitmap == null)
      forceDownload(paramString, paramImageView);
    while (true)
    {
      return;
      cancelPotentialDownload(paramString, paramImageView);
      paramImageView.setImageBitmap(localBitmap);
    }
  }

  // ERROR //
  Bitmap downloadBitmap(String paramString)
  {
    // Byte code:
    //   0: aload_0
    //   1: getfield 65 org/fluturasymphony/recommendation/ImageDownloader:mode Lorg/fluturasymphony/recommendation/ImageDownloader$Mode;
    //   4: getstatic 48    org/fluturasymphony/recommendation/ImageDownloader$Mode:NO_ASYNC_TASK   Lorg/fluturasymphony/recommendation/ImageDownloader$Mode;
    //   7: if_acmpne +107 -> 114
    //   10: new 213    org/apache/http/impl/client/DefaultHttpClient
    //   13: dup
    //   14: invokespecial 214  org/apache/http/impl/client/DefaultHttpClient:<init>    ()V
    //   17: astore_2
    //   18: new 216    org/apache/http/client/methods/HttpGet
    //   21: dup
    //   22: aload_1
    //   23: invokespecial 219  org/apache/http/client/methods/HttpGet:<init>   (Ljava/lang/String;)V
    //   26: astore_3
    //   27: aload_2
    //   28: aload_3
    //   29: invokeinterface 224 2 0
    //   34: astore 15
    //   36: aload 15
    //   38: invokeinterface 230 1 0
    //   43: invokeinterface 235 1 0
    //   48: istore 16
    //   50: iload 16
    //   52: sipush 200
    //   55: if_icmpeq +69 -> 124
    //   58: ldc 15
    //   60: new 237    java/lang/StringBuilder
    //   63: dup
    //   64: ldc 239
    //   66: invokespecial 240  java/lang/StringBuilder:<init>  (Ljava/lang/String;)V
    //   69: iload 16
    //   71: invokevirtual 244  java/lang/StringBuilder:append  (I)Ljava/lang/StringBuilder;
    //   74: ldc 246
    //   76: invokevirtual 249  java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   79: aload_1
    //   80: invokevirtual 249  java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   83: invokevirtual 253  java/lang/StringBuilder:toString    ()Ljava/lang/String;
    //   86: invokestatic 259   android/util/Log:w  (Ljava/lang/String;Ljava/lang/String;)I
    //   89: pop
    //   90: aload_2
    //   91: instanceof 261
    //   94: istore 23
    //   96: aconst_null
    //   97: astore 8
    //   99: iload 23
    //   101: ifeq +10 -> 111
    //   104: aload_2
    //   105: checkcast 261 android/net/http/AndroidHttpClient
    //   108: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   111: aload 8
    //   113: areturn
    //   114: ldc_w 266
    //   117: invokestatic 270  android/net/http/AndroidHttpClient:newInstance  (Ljava/lang/String;)Landroid/net/http/AndroidHttpClient;
    //   120: astore_2
    //   121: goto -103 -> 18
    //   124: aload 15
    //   126: invokeinterface 274 1 0
    //   131: astore 17
    //   133: aload 17
    //   135: ifnull +280 -> 415
    //   138: aconst_null
    //   139: astore 19
    //   141: aload 17
    //   143: invokeinterface 280 1 0
    //   148: astore 19
    //   150: new 282   org/fluturasymphony/recommendation/ImageDownloader$FlushedInputStream
    //   153: dup
    //   154: aload 19
    //   156: invokespecial 285 org/fluturasymphony/recommendation/ImageDownloader$FlushedInputStream:<init>    (Ljava/io/InputStream;)V
    //   159: invokestatic 291  android/graphics/BitmapFactory:decodeStream (Ljava/io/InputStream;)Landroid/graphics/Bitmap;
    //   162: astore 21
    //   164: aload 19
    //   166: ifnull +8 -> 174
    //   169: aload 19
    //   171: invokevirtual 294 java/io/InputStream:close   ()V
    //   174: aload 17
    //   176: invokeinterface 297 1 0
    //   181: aload_2
    //   182: instanceof 261
    //   185: ifeq +10 -> 195
    //   188: aload_2
    //   189: checkcast 261 android/net/http/AndroidHttpClient
    //   192: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   195: aload 21
    //   197: astore 8
    //   199: goto -88 -> 111
    //   202: astore 20
    //   204: aload 19
    //   206: ifnull +8 -> 214
    //   209: aload 19
    //   211: invokevirtual 294 java/io/InputStream:close   ()V
    //   214: aload 17
    //   216: invokeinterface 297 1 0
    //   221: aload 20
    //   223: athrow
    //   224: astore 12
    //   226: aload_3
    //   227: invokevirtual 300 org/apache/http/client/methods/HttpGet:abort    ()V
    //   230: ldc 15
    //   232: new 237   java/lang/StringBuilder
    //   235: dup
    //   236: ldc_w 302
    //   239: invokespecial 240 java/lang/StringBuilder:<init>  (Ljava/lang/String;)V
    //   242: aload_1
    //   243: invokevirtual 249 java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   246: invokevirtual 253 java/lang/StringBuilder:toString    ()Ljava/lang/String;
    //   249: aload 12
    //   251: invokestatic 305  android/util/Log:w  (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    //   254: pop
    //   255: aload_2
    //   256: instanceof 261
    //   259: istore 14
    //   261: aconst_null
    //   262: astore 8
    //   264: iload 14
    //   266: ifeq -155 -> 111
    //   269: aload_2
    //   270: checkcast 261 android/net/http/AndroidHttpClient
    //   273: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   276: aconst_null
    //   277: astore 8
    //   279: goto -168 -> 111
    //   282: astore 9
    //   284: aload_3
    //   285: invokevirtual 300 org/apache/http/client/methods/HttpGet:abort    ()V
    //   288: ldc 15
    //   290: new 237   java/lang/StringBuilder
    //   293: dup
    //   294: ldc_w 307
    //   297: invokespecial 240 java/lang/StringBuilder:<init>  (Ljava/lang/String;)V
    //   300: aload_1
    //   301: invokevirtual 249 java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   304: invokevirtual 253 java/lang/StringBuilder:toString    ()Ljava/lang/String;
    //   307: invokestatic 259  android/util/Log:w  (Ljava/lang/String;Ljava/lang/String;)I
    //   310: pop
    //   311: aload_2
    //   312: instanceof 261
    //   315: istore 11
    //   317: aconst_null
    //   318: astore 8
    //   320: iload 11
    //   322: ifeq -211 -> 111
    //   325: aload_2
    //   326: checkcast 261 android/net/http/AndroidHttpClient
    //   329: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   332: aconst_null
    //   333: astore 8
    //   335: goto -224 -> 111
    //   338: astore 5
    //   340: aload_3
    //   341: invokevirtual 300 org/apache/http/client/methods/HttpGet:abort    ()V
    //   344: ldc 15
    //   346: new 237   java/lang/StringBuilder
    //   349: dup
    //   350: ldc_w 309
    //   353: invokespecial 240 java/lang/StringBuilder:<init>  (Ljava/lang/String;)V
    //   356: aload_1
    //   357: invokevirtual 249 java/lang/StringBuilder:append  (Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   360: invokevirtual 253 java/lang/StringBuilder:toString    ()Ljava/lang/String;
    //   363: aload 5
    //   365: invokestatic 305  android/util/Log:w  (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    //   368: pop
    //   369: aload_2
    //   370: instanceof 261
    //   373: istore 7
    //   375: aconst_null
    //   376: astore 8
    //   378: iload 7
    //   380: ifeq -269 -> 111
    //   383: aload_2
    //   384: checkcast 261 android/net/http/AndroidHttpClient
    //   387: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   390: aconst_null
    //   391: astore 8
    //   393: goto -282 -> 111
    //   396: astore 4
    //   398: aload_2
    //   399: instanceof 261
    //   402: ifeq +10 -> 412
    //   405: aload_2
    //   406: checkcast 261 android/net/http/AndroidHttpClient
    //   409: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   412: aload 4
    //   414: athrow
    //   415: aload_2
    //   416: instanceof 261
    //   419: istore 18
    //   421: aconst_null
    //   422: astore 8
    //   424: iload 18
    //   426: ifeq -315 -> 111
    //   429: aload_2
    //   430: checkcast 261 android/net/http/AndroidHttpClient
    //   433: invokevirtual 264 android/net/http/AndroidHttpClient:close    ()V
    //   436: aconst_null
    //   437: astore 8
    //   439: goto -328 -> 111
    //
    // Exception table:
    //   from   to  target  type
    //   141    164 202 finally
    //   27 90  224 java/io/IOException
    //   124    133 224 java/io/IOException
    //   169    181 224 java/io/IOException
    //   209    224 224 java/io/IOException
    //   27 90  282 java/lang/IllegalStateException
    //   124    133 282 java/lang/IllegalStateException
    //   169    181 282 java/lang/IllegalStateException
    //   209    224 282 java/lang/IllegalStateException
    //   27 90  338 java/lang/Exception
    //   124    133 338 java/lang/Exception
    //   169    181 338 java/lang/Exception
    //   209    224 338 java/lang/Exception
    //   27 90  396 finally
    //   124    133 396 finally
    //   169    181 396 finally
    //   209    224 396 finally
    //   226    255 396 finally
    //   284    311 396 finally
    //   340    369 396 finally
  }

  public void setMode(Mode1 paramMode)
  {
    this.mode = paramMode;
    clearCache();
  }

  class BitmapDownloaderTask extends AsyncTask<String, Void, Bitmap>
  {
    private final WeakReference<ImageView> imageViewReference;
    private String url;

    public BitmapDownloaderTask(ImageView arg2)
    {
      Object localObject;
      this.imageViewReference = new WeakReference(localObject);
    }

    protected Bitmap doInBackground(String[] paramArrayOfString)
    {
      this.url = paramArrayOfString[0];
      return ImageDownloader.this.downloadBitmap(this.url);
    }

    protected void onPostExecute(Bitmap paramBitmap)
    {
      if (isCancelled())
        paramBitmap = null;
      ImageDownloader.this.addBitmapToCache(this.url, paramBitmap);
      if (this.imageViewReference != null)
      {
        ImageView localImageView = (ImageView)this.imageViewReference.get();
        if ((this == ImageDownloader.getBitmapDownloaderTask(localImageView)) || (ImageDownloader.this.mode != ImageDownloader.Mode1.CORRECT))
          localImageView.setImageBitmap(paramBitmap);
      }
    }
  }

  static class DownloadedDrawable extends ColorDrawable
  {
    private final WeakReference<ImageDownloader.BitmapDownloaderTask> bitmapDownloaderTaskReference;

    public DownloadedDrawable(ImageDownloader.BitmapDownloaderTask paramBitmapDownloaderTask)
    {
      super();
      this.bitmapDownloaderTaskReference = new WeakReference<BitmapDownloaderTask>(paramBitmapDownloaderTask);
    }

    public ImageDownloader.BitmapDownloaderTask getBitmapDownloaderTask()
    {
      return (ImageDownloader.BitmapDownloaderTask)this.bitmapDownloaderTaskReference.get();
    }
  }

  static class FlushedInputStream extends FilterInputStream
  {
    public FlushedInputStream(InputStream paramInputStream)
    {
      super(paramInputStream);
    }

    public long skip(long paramLong)
      throws IOException
    {
      long l2;
      for (long l1 = 0L; ; l1 += l2)
      {
        if (l1 >= paramLong);
        do
        {
          return l1;
          l2 = this.in.skip(paramLong - l1);
          if (l2 != 0L)
            break;
        }
        while (read() < 0);
        l2 = 1L;
      }
    }
  }
  public static enum Mode1{

      CORRECT ( new Mode1("CORRECT", 2),
      Mode1[] arrayOfMode = new Mode1[3],
      arrayOfMode[0] = NO_ASYNC_TASK,
      arrayOfMode[1] = NO_DOWNLOADED_DRAWABLE,
      arrayOfMode[2] = CORRECT1);

  }

}

上記のコードのエラーは、私が間違っているところを指すことができる列挙型宣言にあります。

ここで Mode1[]... で間違った構成エラーが発生します

ここに画像の説明を入力

4

1 に答える 1

1

これを実現するには、単純なhttpメソッドを試すことができます。ここでこれを達成するための簡単なプロジェクトを入手できます

于 2013-01-16T06:10:21.950 に答える