Android画廊显示错误

时间:2011-01-24 10:30:15

标签: android gallery

  

可能重复:
  Android: out of memory exception in Gallery

我正在尝试在网格视图中显示我的设备库。然后在从图库网格视图中选择特定图像时,我将该图像上传到服务器上。 上传图片没有问题。但是显示SD卡图像存在问题。 我的代码如下所示。

显示图库..

private void displayGallery() {

  Uri uri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI; // Where images are stored
  displaySdCard();
  String[] projection = {
    MediaStore.Images.ImageColumns._ID,  
    MediaStore.Images.ImageColumns.DATA, // The columns we want
    MediaStore.Images.Thumbnails.IMAGE_ID,  
    MediaStore.Images.Thumbnails.KIND };
  String selection = MediaStore.Images.Thumbnails.KIND + "="  + // Select only mini's
  MediaStore.Images.Thumbnails.MINI_KIND;
  mCursor = this.managedQuery(uri, projection, selection, null, null); 
  if (mCursor != null) { 
   mCursor.moveToFirst();
   int size = mCursor.getCount();
   Uri[] imgUri = new Uri[size];
   for(int k = 0; k < size; k++) {
    mCursor.moveToPosition(k);
       int id = mCursor.getInt(mCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID));
       Uri img_uri = Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, ""+id);
       imgUri[k] = img_uri;
   }


   GalleryImageAdapter galleryImageAdapter = new GalleryImageAdapter(this, imgUri); //(this, mCursor, size);
   gotoPage(pageGallery);
   grid_main.setAdapter(galleryImageAdapter);


  } else 
   showToast(this, "Gallery is empty.");
 }

适配器..

public class GalleryImageAdapter extends BaseAdapter{

 Context mContext;

 public static final int ACTIVITY_CREATE = 10;

 int i = 0;

 private int mImg_uri;

 private Cursor mCursor;


 public GalleryImageAdapter(Context Cursor cursor, int img_uri){
  mContext = c;
  mCursor = cursor;
  mImg_uri = img_uri

 }
 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return mUri.length;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  View v;
  if(convertView==null){
   LayoutInflater li = (LayoutInflater)mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
   v = li.inflate(R.layout.album_img, null);

   ImageView iv = (ImageView)v.findViewById(R.id.icon_image);

   try {
    mCursor.moveToPosition(position);
       int id = mCursor.getInt(mCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID));
       Uri img_uri = Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, ""+id);
       iv.setImageURI(img_uri );

   }
   catch(Exception ex) {
    ex.printStackTrace();
   }


  }
  else
  {
   v = convertView;
  }
  return v;
 }
 @Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return null;
 }
 @Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return 0;
 }
}

首次展示画廊。但从第2次开始,它给出了以下错误......

01-24 15:42:24.788: ERROR/AndroidRuntime(8747): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:375)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:212)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:663)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.graphics.drawable.Drawable.createFromStream(Drawable.java:641)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.ImageView.resolveUri(ImageView.java:491)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.ImageView.setImageURI(ImageView.java:287)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at com.mob.app.GalleryImageAdapter.getView(GalleryImageAdapter.java:71)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.AbsListView.obtainView(AbsListView.java:1269)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.GridView.makeAndAddView(GridView.java:1207)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.GridView.makeRow(GridView.java:263)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.GridView.fillDown(GridView.java:218)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.GridView.fillFromTop(GridView.java:334)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.GridView.layoutChildren(GridView.java:1104)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1108)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.onLayout(LinearLayout.java:920)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.View.layout(View.java:6133)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.ViewRoot.performTraversals(ViewRoot.java:929)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.os.Looper.loop(Looper.java:123)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at android.app.ActivityThread.main(ActivityThread.java:3948)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at java.lang.reflect.Method.invoke(Method.java:521)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
01-24 15:42:24.788: ERROR/AndroidRuntime(8747):     at dalvik.system.NativeStart.main(Native Method)

如果有人有任何解决方案,请告诉我。

0 个答案:

没有答案