2012-08-23 25 views
1

我在我的android應用程序中從服務器下載圖像時遇到問題。
如果我嘗試下載圖像https://www.morroccomethod.com/components/com_virtuemart/shop_image/category/resized/Trial_Sizes_4e4ac3b0d3491_175x175.jpg文件名結果沒有從Android的遠程服務器下載圖像

它返回意味着圖像不下載。 現在我很驚訝,當我在服務器上替換文件的名稱,並將其複製到其他文件夾(https://www.morroccomethod.com/mm/12.jpg)只是爲了測試,然後圖像下載成功
這意味着文件結果的名稱不下載圖像。

現在我想要任何人來幫助和引導我一樣。

回答

1

也許你沒有使用正確的方法來下載圖像。我不完全知道它的問題。但我一直使用一門課,每次都適合我。

ImageLoading.java

public class ImageLoading { 

public enum BitmapManager { 
    INSTANCE; 

    private final Map<String, SoftReference<Bitmap>> cache; 
    private final ExecutorService pool; 
    private Map<ImageView, String> imageViews = Collections 
      .synchronizedMap(new WeakHashMap<ImageView, String>()); 
    private Bitmap placeholder; 

    BitmapManager() { 
     cache = new HashMap<String, SoftReference<Bitmap>>(); 
     pool = Executors.newFixedThreadPool(5); 
    } 

    public void setPlaceholder(Bitmap bmp) { 
     placeholder = bmp; 
    } 


    public Bitmap getBitmapFromCache(String url) { 
     if (cache.containsKey(url)) { 
      return cache.get(url).get(); 
     } 

     return null; 
    } 

    public void queueJob(final String url, final ImageView imageView, 
      final int width, final int height) { 
     /* Create handler in UI thread. */ 
     final Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       String tag = imageViews.get(imageView); 
       if (tag != null && tag.equals(url)) { 
        if (msg.obj != null) { 
         imageView.setImageBitmap((Bitmap) msg.obj); 
        } else { 
         imageView.setImageBitmap(placeholder); 
         Log.d(null, "fail " + url); 
        } 
       } 
      } 
     }; 

     pool.submit(new Runnable() { 
      @Override 
      public void run() { 
       final Bitmap bmp = downloadBitmap(url, width, height); 
       Message message = Message.obtain(); 
       message.obj = bmp; 
       Log.d(null, "Item downloaded: " + url); 

       handler.sendMessage(message); 
      } 
     }); 
    } 

    public void loadBitmap(final String url, final ImageView imageView, 
      final int width, final int height) { 
     imageViews.put(imageView, url); 
     Bitmap bitmap = getBitmapFromCache(url); 

     // check in UI thread, so no concurrency issues 
     if (bitmap != null) { 
      Log.d(null, "Item loaded from cache: " + url); 
      imageView.setImageBitmap(bitmap); 
     } else { 
      imageView.setImageBitmap(placeholder); 
      queueJob(url, imageView, width, height); 
     } 
    } 

    private Bitmap downloadBitmap(String url, int width, int height) { 
     try { 
      Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL( 
        url).getContent()); 
      bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); 
      cache.put(url, new SoftReference<Bitmap>(bitmap)); 
      return bitmap; 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 

}

而且,無論你想這樣實現它 - >

ImageLoading.BitmapManager.INSTANCE.loadBitmap("image_url", your_bitmapImage, width,height); 
+0

我也想你的代碼,但仍然相同問題。 –

+0

它在2.2上工作,但不在以後的版本上。 –

+0

因爲我測試了這兩個地址上的同樣的問題,「未知的主機異常」www.moroccomethod.com「 – DbSethi

相關問題