FATAL EXCEPTION: main java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)

后端 未结 4 1161
时光取名叫无心
时光取名叫无心 2021-01-15 04:42

I keep getting this error when I run my app. The app will compile fine and once I start interacting with it (ImageSlider) sometimes it breaks and comes up with that message.

4条回答
  •  忘掉有多难
    2021-01-15 04:55

    you should use this......

          @Override
        public Object instantiateItem(ViewGroup container, int position) {
            final TouchImageView imgDisplay;
    
            inflater = (LayoutInflater) _activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View viewLayout = inflater.inflate(
                    R.layout.layout_fullscreen_image, container, false);
    
            imgDisplay = (TouchImageView) viewLayout
                    .findViewById(R.id.imgDisplay);
            final ProgressBar spinner = (ProgressBar) viewLayout
                    .findViewById(R.id.loading);
            // btnShare = (Button) viewLayout.findViewById(R.id.btnShare);
    
            imageLoader.displayImage(_imagePaths.get(position).get("url"),
                    imgDisplay, options, new ImageLoadingListener() {
                        @Override
                        public void onLoadingStarted() {
                            spinner.setVisibility(View.VISIBLE);
                        }
    
                        @Override
                        public void onLoadingFailed(FailReason failReason) {
                            String message = null;
                            switch (failReason) {
                            case IO_ERROR:
                                message = "Input/Output error";
                                break;
                            case OUT_OF_MEMORY:
                                message = "Out Of Memory error";
                                break;
                            case UNKNOWN:
                                message = "Unknown error";
                                break;
                            }
                            Toast.makeText(FullScreenViewActivity.this,
                                    message, Toast.LENGTH_SHORT).show();
    
                            spinner.setVisibility(View.GONE);
                            imgDisplay
                                    .setImageResource(android.R.drawable.ic_delete);
                        }
    
                        @Override
                        public void onLoadingComplete(Bitmap loadedImage) {
                            spinner.setVisibility(View.GONE);
                            Animation anim = AnimationUtils
                                    .loadAnimation(FullScreenViewActivity.this,
                                            R.anim.fade_in);
                            imgDisplay.setAnimation(anim);
                            anim.start();
    
                        }
    
                        @Override
                        public void onLoadingCancelled() {
                            // Do nothing
                        }
                    });
    
            ((ViewPager) container).addView(viewLayout, 0);
    
            return viewLayout;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((FrameLayout) object);
    
        }
    }
    

    Add this code on onCreate() method..

          private DisplayImageOptions options;
    
          options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.ic_launcher).cacheOnDisc()
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();
    

    Add universal-image-loader-1.6.1-with-src.jar jar file to your libs folder.

    UPDATE:

     private DisplayImageOptions options;
     public FullScreenImageAdapter(Activity activity,
            ArrayList imagePaths) {
        this._activity = activity;
        this._imagePaths = imagePaths;
        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.ic_launcher).cacheOnDisc()
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();
     }
    

提交回复
热议问题