2015-02-10 102 views
4

我正在使用畢加索將一些圖像從聯機加載到listView中。問題是,雖然一些圖像被成功加載,但有些只是簡單的消失。畢加索無法加載某些URL的圖像(無特殊字符)

成功(成功顯示品牌形象):

enter image description here

失敗(無品牌形象所示,失敗):當它失敗

enter image description here

的ImageView的消失。這裏是我的代碼:

Picasso.with(mContext) 
.load(UrlEncoder.encode(interiorDesign.getBrand_image_url())) 
.config(Bitmap.Config.RGB_565) 
.error(R.drawable.blank) 
.fit() 
.centerInside() 
.into(holder.brand); 

這裏是我的.xml文件:

<LinearLayout 
android:layout_width="match_parent" 
     android:layout_height="90dp" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:layout_alignParentLeft="true" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 

<RelativeLayout 
android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingRight="10dp"> 
... 
</RelativeLayout> 

<ImageView 
android:layout_width="200dp" 
     android:layout_height="90dp" 
     android:paddingBottom="10dp" 
     android:id="@+id/partial_interior_design_brand" /> 
</LinearLayout> 

我已經檢查了它,因爲它捕獲在畢加索的錯誤()方法的錯誤失敗。

Here是失敗的鏈接。

Here是另一個失敗的鏈接。

Here是一個成功的鏈接。

這個問題發生在我身上好幾次了。我懷疑問題在於fit()和centerInside()方法,因爲在我刪除這兩個方法之後,問題就解決了。然而,如果沒有這兩種方法,我的圖像根本不適合這個尺寸。

+0

只要使用這個畢加索.with(mContext).load(interiorDesign.getBrand_image_url()).config(Bitmap.Config.RGB_565) .error(R.drawable.blank) .fit() .centerInside() .into(holder.brand); – 2015-02-10 10:07:15

+2

我測試過了。它不起作用。我切換到通用圖像加載器,最終解決了問題。我不知道畢加索出了什麼問題。我遇到過這樣的問題很多。 – Derekyy 2015-02-10 16:26:56

+0

那麼你切換到一個更好的圖書館:) – 2015-02-11 06:34:40

回答

0

我使用的是畢加索這樣的,它總是加載我的圖片:

if (imageURL != null) { 
    Picasso.with(getContext()).load(imageURL).error(R.drawable.ic_missing) 
    .into(ivThumbnail); 

我的佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/itemview_campaign_background" 
    android:orientation="vertical" 
    android:paddingBottom="5dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" > 

    <ImageView 
     android:id="@+id/ivThumbnail" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 

... // More stuff 
0

除了切換到通用圖像裝載機,我發現這另一種解決方案,通過使用Picasso中的Transform()方法,並將位圖的targetHeight指定爲ImageView的高度。由於CenterInside只是意味着位圖必須完全位於imageView中,我還要檢查targetWidth(縮放後)是否大於imageView的寬度。如果是這樣,我使用targetWidth作爲參考點而不是targetHeight。

  Picasso.with(mContext) 
        .load(url) 
        .transform(new Transformation() { 
         @Override 
         public Bitmap transform(Bitmap source) { 
          int targetHeight = dpToPx(height_dp); 
          double aspectRatio = (double) source.getHeight()/(double) source.getWidth(); 
          int targetWidth = (int) (targetHeight/aspectRatio); 
          if (targetWidth > dpToPx(width_dp)) { 
           targetWidth = dpToPx(width_dp); 
           targetHeight = (int) (targetWidth * aspectRatio); 
          } 
          Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false); 
          if (result != source) { 
           // Same bitmap is returned if sizes are the same 
           source.recycle(); 
          } 
          return result; 
         } 

         @Override 
         public String key() { 
          return "transformation" + " desiredWidth"; 
         } 
        }) 
        .into(imageView); 

private int dpToPx(int dp) { 
    float density = Resources.getSystem().getDisplayMetrics().density; 
    return Math.round((float) dp * density); 
} 

編輯: 經過測試,我發現這種方法在某些情況下不起作用。仍然找出解決方案。

2

嘿嘗試只是concavanate你的網址「http://」。由於某種原因,picassa不會在沒有http://的情況下加載圖片。 所以只是接下來的事情儘量

Picasso.with(mContext) 
.load("http://".concatenate(url)) 
.config(Bitmap.Config.RGB_565) 
.error(R.drawable.blank) 
.fit() 
.centerInside() 
.into(holder.brand); 
0

沒有必要使用URLEncoder的

.load(UrlEncoder.encode(interiorDesign.getBrand_image_url()))

只是URL的字符串

.load(interiorDesign.getBrand_image_url())