Out of memory sur un Widget Gallery
Bonjour
Je suis en train de tester un Widget Gallery. Le programme fonctionne correctement si j'utilise les ressources de type Draw mais il annonce un out Of Memory quand je lis les photos prises par le device sur la SdCard. Les deux première photos s'affichent puis quand je fais glisser ca explose.
Voici le code de la classe de test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
public class TestGallery extends Activity {
private int[] IMG;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Cursor imgCursor = managedQuery
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{android.provider.MediaStore.Images.Media._ID},
null, null,
null);
imgCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,null, null,null);
int nbrCol = imgCursor.getColumnCount();
Log.i("Test","nbrCol = " + String.valueOf(nbrCol));
int Pos = 0;
imgCursor.moveToFirst();
//while(!imgCursor.isAfterLast()){
ArrayList<String> arrayImage = new ArrayList<String>();
for (int Cpt = 0; Cpt < 65; Cpt++){
String nom = imgCursor.getString(1);
if (nom.contains("Perso")){
arrayImage.add(imgCursor.getString(0));
Log.i("Test","ID = " + imgCursor.getString(0) + " nom = " + nom + " size = " + imgCursor.getString(2));
}
imgCursor.moveToNext();
}
int nbrPhoto = arrayImage.size();
Log.i("Test","nbrPhoto = " + String.valueOf(nbrPhoto));
IMG = new int[nbrPhoto];
for (int Cpt = 0; Cpt < nbrPhoto; Cpt++){
IMG[Cpt] = Integer.parseInt(arrayImage.get(Cpt));
}
Gallery galleryPhoto = (Gallery) findViewById(R.id.Gallery01);
ImageAdapter imageAdapter = new ImageAdapter(this, IMG);
galleryPhoto.setAdapter(imageAdapter);
}
} |
Voici le code de la classe ImageAdpater
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
public class ImageAdapter extends BaseAdapter{
int galleryBkgd;
private Context context;
private int[]images;
public ImageAdapter(Context cont, int[] img) {
context = cont;
images = img;
TypedArray typedArray = context.obtainStyledAttributes(R.styleable.Gallery);
galleryBkgd = typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
typedArray.recycle();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return images.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView imageView = new ImageView(context);
//imageView.setImageResource(images[position]);
imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,String.valueOf(position)));
imageView.setBackgroundResource(galleryBkgd);
return imageView;
}
} |
Et enfin le message d'injures
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:451)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:322)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:688)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:657)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.ImageView.resolveUri(ImageView.java:557)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.ImageView.setImageURI(ImageView.java:289)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at com.android.testgallery.ImageAdapter.getView(ImageAdapter.java:51)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.Gallery.makeAndAddView(Gallery.java:754)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.Gallery.fillToGalleryRight(Gallery.java:703)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.Gallery.layout(Gallery.java:634)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.Gallery.onLayout(Gallery.java:339)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.View.layout(View.java:6578)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.View.layout(View.java:6578)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.View.layout(View.java:6578)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.View.layout(View.java:6578)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.View.layout(View.java:6578)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.ViewRoot.performTraversals(ViewRoot.java:1056)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.view.ViewRoot.handleMessage(ViewRoot.java:1774)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.os.Handler.dispatchMessage(Handler.java:99)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.os.Looper.loop(Looper.java:123)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at android.app.ActivityThread.main(ActivityThread.java:4321)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at java.lang.reflect.Method.invokeNative(Native Method)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at java.lang.reflect.Method.invoke(Method.java:521)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
09-06 10:04:09.708: ERROR/AndroidRuntime(20338): at dalvik.system.NativeStart.main(Native Method) |
Une idée ?
Merci d'avance