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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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