Autore Topic: Problema OutOfMemoryError: bitmap size exceeds VM budget  (Letto 906 volte)

Offline gui892

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s2
Problema OutOfMemoryError: bitmap size exceeds VM budget
« il: 01 Marzo 2012, 12:40:59 CET »
0
Salve a tutti!
Ho il seguente problema quando faccio partire la gallery della mia applicazione sull'emulatore,appena tocco un immagine per visualizzarla mi da errore OutOfMemoryError: bitmap size exceeds VM budget.Credo che il motivo sia le dimensioni delle immagini(960x800),ma non riesco a risolverlo.Se lo provo sul cellulare (samsung gs2) funziona correttamente.
Codice: [Seleziona]
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:503)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:477)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:331)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
at android.content.res.Resources.loadDrawable(Resources.java:1709)
at android.content.res.Resources.getDrawable(Resources.java:581)
at android.widget.ImageView.resolveUri(ImageView.java:489)
at android.widget.ImageView.setImageResource(ImageView.java:274)
at it.guido.thew.immagini$ImageAdapter.getView(immagini.java:155)
at android.widget.Gallery.makeAndAddView(Gallery.java:745)
at android.widget.Gallery.fillToGalleryRight(Gallery.java:697)
at android.widget.Gallery.trackMotionScroll(Gallery.java:372)
at android.widget.Gallery.onScroll(Gallery.java:930)
at android.view.GestureDetector.onTouchEvent(GestureDetector.java:529)
at android.widget.Gallery.onTouchEvent(Gallery.java:839)
at android.view.View.dispatchTouchEvent(View.java:3778)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2072)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1172)
at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2056)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2072)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1172)
at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2056)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
at dalvik.system.NativeStart.main(Native Method)
Ecco il codice java:
Codice (Java): [Seleziona]
public  class immagini extends Activity
{

        Integer[] pics = {
                       
                        R.drawable.img1,R.drawable.img2,R.drawable.img6,R.drawable.img7,R.drawable.img10,R.drawable.img11,
                        R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img8,R.drawable.img9,R.drawable.img12,
                        R.drawable.img13,R.drawable.img14,R.drawable.img15,
                       
                        };
        private static final String ADMOB_ID2 = "a14f3e67f7b21fb";
                 private AdView adView;
        private AlertDialog.Builder alert;
        @Override    
        public void onCreate(Bundle savedInstanceState)        {
 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.immagini);
            Context context = getApplicationContext();
                        CharSequence text = "Toccare l'immagine per ingrandirla o tocca quella al centro per impostarla come Wallpaper";
                        int duration = Toast.LENGTH_LONG;

                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
            alert = new AlertDialog.Builder(this);  
            Gallery gallery = (Gallery) findViewById(R.id.gallery1);
                 
            gallery.setAdapter(new ImageAdapter(this));        
            gallery.setOnItemClickListener(new OnItemClickListener()
            {
                 public void onItemClick(AdapterView<?> parent,
                            View v, final int position, long id)
                {        
                         ImageView imageView = (ImageView) findViewById(R.id.imageView1);                
                     imageView.setImageResource(pics[position]);
                     imageView.setOnClickListener(new Button.OnClickListener(){
                         public void onClick(View arg0) {
                                        alert.setTitle("Impostare come Wallpaper?");           
                                alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {
                             
                                  WallpaperManager myWallpaperManager  = WallpaperManager.getInstance(getApplicationContext());
                           
                                        try {
                                                                                myWallpaperManager.setResource(pics[position]);
                                                                        } catch (IOException e) {
                                                                                // TODO Auto-generated catch block
                                                                                e.printStackTrace();
                                                                        }
                                }
                                        }
                                );

                                alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                  public void onClick(DialogInterface dialog, int whichButton) {
                                    // Canceled.
                                  }
                                });
                                alert.show();
                         }
                         });
                }
            });
            adView = new AdView(this, AdSize.BANNER,ADMOB_ID2);

                    // Lookup your LinearLayout assuming it’s been given
                    // the attribute android:id="@+id/mainLayout"
                    LinearLayout layout = (LinearLayout)findViewById(R.id.linearlayout);
                    layout.addView(adView);

                    // Initiate a generic request to load it with an ad
                    adView.loadAd(new AdRequest());
                  }

                  @Override
                  public void onDestroy() {
                    adView.destroy();
                    super.onDestroy();
                   
               
        }
       
       
 
                  public View makeView()
                {
                    ImageView imageView = new ImageView(this);
                    imageView.setBackgroundColor(0xFF000000);
                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);                    
                         
                    return imageView;
                }
                public class ImageAdapter extends BaseAdapter
                {
                    private Context context;
                    private int itemBackground;
             
                    public ImageAdapter(Context c)
                    {
                        context = c;
                        //---setting the style---
                        TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
                        itemBackground = a.getResourceId(
                            R.styleable.Gallery1_android_galleryItemBackground, 0);
                        a.recycle();                    
                    }
             
                    //---returns the number of images---
                    public int getCount() {
                        return pics.length;
                    }
             
                    //---returns the ID of an item---
                    public Object getItem(int position) {
                        return position;
                    }            
             
                    public long getItemId(int position) {
                        return position;
                    }
             
                    //---returns an ImageView view---
                    public View getView(int position, View convertView, ViewGroup parent) {
                        ImageView imageView = new ImageView(context);
                        imageView.setImageResource(pics[position]);
                        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                        imageView.setLayoutParams(new Gallery.LayoutParams(200, 120));
                        imageView.setBackgroundResource(itemBackground);
                        return imageView;
                    }
                   
               
                }  
               
            }
« Ultima modifica: 01 Marzo 2012, 12:43:21 CET da gui892 »

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Problema OutOfMemoryError: bitmap size exceeds VM budget
« Risposta #1 il: 01 Marzo 2012, 14:20:30 CET »
0
devi impostare l'heap size del terminale come quella del tuo cellulare

Offline gui892

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s2
Re:Problema OutOfMemoryError: bitmap size exceeds VM budget
« Risposta #2 il: 01 Marzo 2012, 15:36:13 CET »
0
Ok,grazie della risposta.
Ma se avessi un cellulare con meno heap size?(scusa la mia ignoranza)