Image background issue android-Collection of common programming errors

i’m working on app, that reads image from gallery, and becomes background in layout, i’ve used the following code but it gives me force close error as soon as i click the picture, here is the code

 Intent intent = new Intent();
     intent.setType("image/*");
     intent.setAction(Intent.ACTION_GET_CONTENT);
     startActivityForResult(Intent.createChooser(intent, "Select Picture"),0);

and

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        {
            super.onActivityResult(requestCode, resultCode, data);

        if(resultCode == Activity.RESULT_OK && requestCode == 0) {
            Uri photo = imageUri;
            ContentResolver resolver = getContentResolver();
            resolver.notifyChange(photo, null);

            try {                   
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(resolver, photo);
                RelativeLayout bg = (RelativeLayout) findViewById(R.id.bg);
                Drawable drawable = new BitmapDrawable(getResources(), bitmap);
                bg.setBackgroundDrawable(drawable);

            //Do something useful with your bitmap
                } catch (FileNotFoundException e) {
                e.printStackTrace();
                } catch (IOException e) {
                e.printStackTrace();
            }
        }
        }
    }

main.xml




    

        

        
    

    


Here is my error log

05-16 20:20:23.768: W/dalvikvm(288): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-16 20:20:24.098: E/AndroidRuntime(288): FATAL EXCEPTION: main
05-16 20:20:24.098: E/AndroidRuntime(288): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://media/external/images/media/1 }} to activity {org.example.touch/org.example.touch.Touch}: java.lang.NullPointerException
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.ActivityThread.access$2800(ActivityThread.java:125)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.os.Looper.loop(Looper.java:123)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-16 20:20:24.098: E/AndroidRuntime(288):  at java.lang.reflect.Method.invokeNative(Native Method)
05-16 20:20:24.098: E/AndroidRuntime(288):  at java.lang.reflect.Method.invoke(Method.java:521)
05-16 20:20:24.098: E/AndroidRuntime(288):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-16 20:20:24.098: E/AndroidRuntime(288):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-16 20:20:24.098: E/AndroidRuntime(288):  at dalvik.system.NativeStart.main(Native Method)
05-16 20:20:24.098: E/AndroidRuntime(288): Caused by: java.lang.NullPointerException
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.os.Parcel.readException(Parcel.java:1253)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.os.Parcel.readException(Parcel.java:1235)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:458)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.content.ContentResolver.notifyChange(ContentResolver.java:850)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.content.ContentResolver.notifyChange(ContentResolver.java:836)
05-16 20:20:24.098: E/AndroidRuntime(288):  at org.example.touch.Touch.onActivityResult(Touch.java:117)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.Activity.dispatchActivityResult(Activity.java:3890)
05-16 20:20:24.098: E/AndroidRuntime(288):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
05-16 20:20:24.098: E/AndroidRuntime(288):  ... 11 more
  1. It loads the image successfully and set as background, but crashes when i tried to load larger images i.e. 8mpx camera image etc. I managed to solve that by the following code:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            {
                super.onActivityResult(requestCode, resultCode, data);
    
                if (resultCode == Activity.RESULT_OK && requestCode == 0) {
                    Uri photo = data.getData();
                    ContentResolver resolver = getContentResolver();
                    resolver.notifyChange(photo, null);
    
                    Display currentDisplay = getWindowManager().getDefaultDisplay();
                    int dw = currentDisplay.getWidth();
                    int dh = currentDisplay.getHeight() / 2 - 100;
                    try {
                        // Load up the image's dimensions not the image itself
                        BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
                        bmpFactoryOptions.inJustDecodeBounds = true;
                        Bitmap bmp = BitmapFactory.decodeStream(
                                getContentResolver().openInputStream(photo), null,
                                bmpFactoryOptions);
                        int heightRatio = (int) Math
                                .ceil(bmpFactoryOptions.outHeight / (float) dh);
                        int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth
                                / (float) dw);
                        if (heightRatio > 1 && widthRatio > 1) {
                            if (heightRatio > widthRatio) {
                                bmpFactoryOptions.inSampleSize = heightRatio;
                            } else {
                                bmpFactoryOptions.inSampleSize = widthRatio;
                            }
                        }
                        bmpFactoryOptions.inJustDecodeBounds = false;
                        FrameLayout bg = (FrameLayout) findViewById(R.id.frame);
                        bmp = BitmapFactory.decodeStream(getContentResolver()
                                .openInputStream(photo), null, bmpFactoryOptions);
                        // bg.setImageBitmap(bmp);
                        Drawable drawable = new BitmapDrawable(getResources(), bmp);
                        bg.setBackgroundDrawable(drawable);
                    } catch (FileNotFoundException e) {
                        Log.v("ERROR", e.toString());
                    }
                }
            }
        }
    

    That worked perfectly fine for all images. Hope it would help someone!

Originally posted 2013-11-16 20:50:35.