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
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
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); } }
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
Une idée ?
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)
Merci d'avance
Partager