2015-10-02 222 views
2

我將ParseFile加載到了數組列表照片。 但現在我想在ImageView中顯示它?將圖像從解析圖像加載到圖像視圖

ArrayList<Photo> photos = new ArrayList<>(); 
    try { 
     ParseQuery<ParseObject> query = new ParseQuery<>("photo"); 
     query.setLimit(2000); 
     List<ParseObject> listA = query.find(); 
     for (ParseObject mPhoto : listA) { 
      Photo newPhoto = new Photo(); 
      newPhoto.setImage((ParseFile) mPhoto.get("imageFile")); 
      newPhoto.setTrade_id((String) mPhoto.get("trade_id")); 
      photos.add(newPhoto); 
     } 
    } catch (com.parse.ParseException e) { 
     Log.e("Error", e.getMessage()); 
     e.printStackTrace(); 
    } 

我該怎麼辦呢?

回答

3

試試這個代碼。這將告訴你如何顯示1 。如果要顯示arraylist中的所有圖像,則應將Bitmap object保存爲arraylist而不是ParseFile object

ParseFile fileObject = (ParseFile) object 
    .get("imageFile"); 
fileObject 
    .getDataInBackground(new GetDataCallback() { 

     public void done(byte[] data, 
      ParseException e) { 
      if (e == null) { 
       // Decode the Byte[] into 
       // Bitmap 
       Bitmap bmp = BitmapFactory 
        .decodeByteArray(
         data, 0, 
         data.length); 

       // initialize 
       ImageView image = (ImageView) findViewById(R.id.image); 

       // Set the Bitmap into the 
       // ImageView 
       image.setImageBitmap(bmp); 

      } else { 
       Log.d("test", 
        "Problem load image the data."); 
      } 
     } 
    }); 

另一種方法是,你需要獲得圖像的URL
String imageUrl = parseFileObject.getUrl();

然後用PicassoUniversalImageLoader負載圖像

注意:你應該使用AsyncTask與解析性能和同步

希望這個幫助

+1

也許你誤會了我的想法,我想在我的ArrayList中顯示ParseFile,而不是在Parse中再次加載,因爲我之前加載了它。 –

+1

我認爲這是你的指南,你應該再次修改它適合你的代碼。我的代碼中的 我告訴你如何從'ParseFile'創建一個'位圖',然後如何在'Imageview'中顯示'位圖'。然後,不要在你的數組列表中保存'ParseFile',你應該在你的數組列表中保存'Bitmap' –

+1

因爲我在Application中加載數據,並且在活動中用戶可以獲取信息,然後onClick信息並顯示。 –

1

那麼你有圖片的數組,所以如果你想顯示他們都通過ArrayList<photo>CustomAdpater和使用ListView可以顯示整個事情

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:contentDescription="@string/image" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" /> 
</RelativeLayout> 

CustomAdpater.java

public class CustomAdpater extends ArrayAdapter<RowItem> { 

    Context context; 

    public CustomAdpater(Context context, int resourceId, 
      ArrayList<Photo> items) { 
     super(context, resourceId, items); 
     this.context = context; 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     ImageView imageView; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     Photo rowItem = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item, null); 
      holder = new ViewHolder(); 
      holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 


     holder.imageView.setImageResource(rowItem.getImage()); 

     return convertView; 
    } 
} 
1

簡單地將圖像設置到imageView的方法是設置位圖變量。使用Photo類的Getter方法,並將其設置爲位圖變量。

Bitmap yourImage = newPhoto.getImage(); //Gets the image and set to yourImage variable 
ImageView imageView = (ImageView) findViewById(R.id.yourId) 
imageView.setImageBitmap(yourImage); 

可以使用BitmapFactory類的屬性按需要進行解碼,並存儲在變量..