我正在尝试在网格视图中显示我的设备库。然后在从图库网格视图中选择特定图像时,我将该图像上传到服务器上。 上传图片没有问题。但是显示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)
如果有人有任何解决方案,请告诉我。