-1

I have this code to capture image or select from gallery and then crop it. The image does not show and inside onActivityResult the data variable is null. What should I do to solve this? Please help!!

Thanks in advance.

import java.io.File;
import java.io.FileOutputStream;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.kbeanie.imagechooser.api.ChooserType;
import com.kbeanie.imagechooser.api.ChosenImage;
import com.kbeanie.imagechooser.api.ImageChooserListener;
import com.kbeanie.imagechooser.api.ImageChooserManager;

public class ProfileName extends Activity implements TextWatcher,
        OnClickListener, ImageChooserListener {
    int choice;
    private static int RESULT_CAPTURE = 1;
    private static int RESULT_LOAD_IMAGE = 2;
    ImageView click;
    ImageView cam;
    boolean cond = false;
    EditText nameText;
    TextView name_view;
    ImageView camImage;
    String Name = null;
    String fileName;
    ImageView exist;
    ImageView save;
    Bitmap bm;
    int currentState = 0;
    ImageView btnForward, btnBack;
    RelativeLayout rl_name, rl_profile_create, rl_display;
    private ImageChooserManager imageChooserManager;
    private int chooserType;
    private String filePath;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.profile_name);
        cam = (ImageView) findViewById(R.id.camera);
        nameText = (EditText) findViewById(R.id.editText1);
        nameText.addTextChangedListener(this);
        btnForward = (ImageView) findViewById(R.id.btnForward);
        btnForward.setOnClickListener(this);
        btnBack = (ImageView) findViewById(R.id.btnBack);
        btnBack.setOnClickListener(this);
        save = (ImageView) findViewById(R.id.save);
        save.setOnClickListener(this);
        name_view = (TextView) findViewById(R.id.textView2);
        camImage = (ImageView) findViewById(R.id.camImage);

        exist = (ImageView) findViewById(R.id.existing_img);
        exist.setOnClickListener(this);
        click = (ImageView) findViewById(R.id.new_img);
        click.setOnClickListener(this);

        rl_name = (RelativeLayout) findViewById(R.id.rl_name);
        rl_profile_create = (RelativeLayout) findViewById(R.id.rl_profile_create);
        rl_display = (RelativeLayout) findViewById(R.id.rl_display);

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        Name = nameText.getText().toString();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btnForward:
            // if (Name != null) {
            //
            // Intent j = new Intent(ProfileName.this, CreateProfile.class);
            // j.putExtra("name", nameText.getText().toString());
            // j.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            // | Intent.FLAG_ACTIVITY_NEW_TASK);
            // startActivity(j);

            // finish();
            // } else {
            // Toast.makeText(ProfileName.this, "Please Enter The Name",
            // Toast.LENGTH_SHORT).show();
            // }
            if (currentState < 3) {
                currentState++;
            }
            displayScreens();
            break;
        case R.id.btnBack:

            if (currentState != 0) {
                currentState--;
            }
            displayScreens();

            break;
        case R.id.save:

            if (Name != null) {
                save(bm);
                Intent j = new Intent(ProfileName.this, MainActivity.class);
                j.putExtra("bit", bm);
                j.putExtra("name", Name);
                j.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(j);
                SharedPreferences settings = getSharedPreferences(
                        Start.PREFS_NAME, 0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putBoolean("hasLoggedIn", true);
                editor.commit();
                finish();
            } else {
                Toast.makeText(ProfileName.this, "Please Enter The Name",
                        Toast.LENGTH_SHORT).show();
            }

            break;
        case R.id.existing_img:

            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            choice = 2;
            startActivityForResult(i, RESULT_LOAD_IMAGE);

            break;
        case R.id.new_img:

            // open();

            chooserType = ChooserType.REQUEST_CAPTURE_PICTURE;
            imageChooserManager = new ImageChooserManager(this,
                    ChooserType.REQUEST_CAPTURE_PICTURE, "myfolder", true);
            imageChooserManager.setImageChooserListener(this);
            try {
                filePath = imageChooserManager.choose();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

            break;

        default:
            break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // TODO Auto-generated method stub
        if (requestCode == RESULT_CAPTURE && resultCode == RESULT_OK
        /* && null != data */&& choice == 1) {

            File file = new File(Environment.getExternalStorageDirectory()
                    + File.separator + "img.jpg");
            // Crop the captured image using an other intent
            try {
                /* the user's device may not support cropping */
                cropCapturedImage(Uri.fromFile(file));
            } catch (ActivityNotFoundException aNFE) {
                // display an error message if user device doesn't support
                String errorMessage = "Sorry - your device doesn't support the crop action!";
                Toast toast = Toast.makeText(this, errorMessage,
                        Toast.LENGTH_SHORT);
                toast.show();
            }
            // Bitmap bp = (Bitmap) data.getExtras().get("data");
            // // save(bp);
            // bm=bp;
            // cam.setImageBitmap(bp);
        } else if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
                && null != data && choice == 2) {
            Uri selectedImage = data.getData();
            try {
                /* the user's device may not support cropping */
                cropCapturedImage(selectedImage);
            } catch (ActivityNotFoundException aNFE) {
                // display an error message if user device doesn't support
                String errorMessage = "Sorry - your device doesn't support the crop action!";
                Toast toast = Toast.makeText(this, errorMessage,
                        Toast.LENGTH_SHORT);
                toast.show();
            }
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            String picturePath = cursor.getString(cursor
                    .getColumnIndex(filePathColumn[0]));
            cursor.close();
            // save(BitmapFactory.decodeFile(picturePath));
            bm = BitmapFactory.decodeFile(picturePath);
            // bm=ilu.decodeBitmapFromPath(picturePath);
            cam.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        }
        if (requestCode == 3 && data != null) {
            // Create an instance of bundle and get the returned data
            Bundle extras = data.getExtras();
            // get the cropped bitmap from extras
            Bitmap thePic = extras.getParcelable("data");
            // set image bitmap to image view
            cam.setImageBitmap(thePic);
            bm = thePic;
        } else if (resultCode == RESULT_OK
                && (requestCode == ChooserType.REQUEST_PICK_PICTURE || requestCode == ChooserType.REQUEST_CAPTURE_PICTURE)) {
            if (imageChooserManager == null) {
                reinitializeImageChooser();
            }
            imageChooserManager.submit(requestCode, data);
        }
    }

    private void reinitializeImageChooser() {
        imageChooserManager = new ImageChooserManager(this, chooserType,
                "myfolder", true);
        imageChooserManager.setImageChooserListener(this);
        imageChooserManager.reinitialize(filePath);
    }

    public void open() {
        // Intent intent = new
        // Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        // startActivityForResult(intent,REQUEST_IMAGE_CAPTURE);
        // choice=1;
        Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        /* create instance of File with name img.jpg */
        File file = new File(Environment.getExternalStorageDirectory()
                + File.separator + "img1.jpg");
        /* put uri as extra in intent object */

        if (!file.exists()) {
            file.mkdirs();
        } else {
            file.delete();
            file.mkdirs();
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        /* start activity for result pass intent as argument and request code */
        // startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);

        try {

            startActivityForResult(intent, RESULT_CAPTURE);
        } catch (ActivityNotFoundException e) {
            e.printStackTrace();
        }

        choice = 1;
    }

    @SuppressLint("SdCardPath")
    public void save(Bitmap bitM) {
        // fileName=nameText.getText().toString()+".jpg";
        fileName = Name;
        File direct = new File(Environment.getExternalStorageDirectory()
                .getAbsoluteFile() + "/FabFamily/Me");

        if (!direct.exists()) {
            direct = new File(Environment.getExternalStorageDirectory()
                    .getAbsoluteFile() + "/FabFamily/Me");
            direct.mkdirs();
        } else if (direct.exists()) {
            direct.delete();
            direct = new File(Environment.getExternalStorageDirectory()
                    .getAbsoluteFile() + "/FabFamily/Me");
            direct.mkdirs();
        }

        File file = new File(new File(Environment.getExternalStorageDirectory()
                .getAbsoluteFile() + "/FabFamily/Me"), fileName + ".jpg");
        if (file.exists()) {
            file.delete();
        }
        try {
            FileOutputStream out = new FileOutputStream(file);
            bitM.compress(Bitmap.CompressFormat.JPEG, 75, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void displayScreens() {
        switch (currentState) {
        case 0:

            rl_name.setVisibility(View.VISIBLE);
            rl_profile_create.setVisibility(View.GONE);
            rl_display.setVisibility(View.GONE);
            save.setVisibility(View.GONE);
            btnBack.setVisibility(View.GONE);
            btnBack.setVisibility(View.VISIBLE);

            break;
        case 1:

            rl_name.setVisibility(View.GONE);
            rl_profile_create.setVisibility(View.VISIBLE);
            rl_display.setVisibility(View.GONE);
            btnBack.setVisibility(View.VISIBLE);
            btnForward.setVisibility(View.VISIBLE);
            save.setVisibility(View.GONE);

            break;
        case 2:

            rl_name.setVisibility(View.GONE);
            rl_profile_create.setVisibility(View.GONE);
            rl_display.setVisibility(View.VISIBLE);
            btnForward.setVisibility(View.GONE);
            btnBack.setVisibility(View.VISIBLE);
            save.setVisibility(View.VISIBLE);
            camImage.setImageBitmap(bm);
            name_view.setText(Name);

            break;

        default:
            break;
        }
    }

    public void cropCapturedImage(Uri picUri) {
        // call the standard crop action intent
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        // indicate image type and Uri of image
        cropIntent.setDataAndType(picUri, "image/*");
        // set crop properties
        cropIntent.putExtra("crop", "true");
        // indicate aspect of desired crop
        cropIntent.putExtra("aspectX", 1);
        cropIntent.putExtra("aspectY", 1);
        // indicate output X and Y
        cropIntent.putExtra("outputX", 256);
        cropIntent.putExtra("outputY", 256);
        // retrieve data on return
        cropIntent.putExtra("return-data", true);
        // start the activity - we handle returning in onActivityResult
        startActivityForResult(cropIntent, 3);
    }

    @Override
    public void onImageChosen(com.kbeanie.imagechooser.api.ChosenImage image) {
        // TODO Auto-generated method stub
        if (image != null) {
            try {
                // Bitmap photo = BitmapFactory.decodeFile(image
                // .getFilePathOriginal());
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 8;
                // Bitmap preview_bitmap=BitmapFactory.decodeFile(image,

                Bitmap photo = BitmapFactory.decodeFile(
                        image.getFilePathOriginal(), options);

                try {
                    ExifInterface exif = new ExifInterface(
                            image.getFilePathOriginal());
                    int orientation = exif.getAttributeInt(
                            ExifInterface.TAG_ORIENTATION, 1);
                    // Log.d("EXIF", "Exif: " + orientation);
                    Matrix matrix = new Matrix();
                    if (orientation == 6) {
                        matrix.postRotate(90);
                    } else if (orientation == 3) {
                        matrix.postRotate(180);
                    } else if (orientation == 8) {
                        matrix.postRotate(270);
                    }

                    photo = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(),
                            photo.getHeight(), matrix, true); // rotating bitmap

                    // if (orientation != 0) {
                    // photo = getResizedBitmap(photo, 180, 360);
                    // }

                } catch (Exception e) {

                }
                // if (photo.getWidth() > 180 && photo.getHeight() >
                // 250) {
                // photo = getResizedBitmap(photo, 180, 250);
                // }
                // imgVw.setImageBitmap(photo);

                // txtImgPath.setText(image.getFilePathOriginal());
                Log.i("sdfh", "IMAGEPATH :" + image.getFilePathOriginal());
                //
                // base64 = Utility.BitMapToString(photo);
                // imgPathLayout.setVisibility(View.VISIBLE);

            } catch (Exception e) {
                Log.i("", "dsvj on image chosen:" + e.getMessage());
            }
        }
    }

    @Override
    public void onError(String reason) {
        // TODO Auto-generated method stub

    }
}
NorthCat
  • 9,643
  • 16
  • 47
  • 50
andrDev
  • 23
  • 1
  • 11
  • 1
    You have posted way to much code. Do you ask us to read all this irrelevant stuff? Please post only code that directly concerns your problem. Please edit your post. – greenapps Mar 10 '15 at 09:58

1 Answers1

1

Assuming you're asking about 'data' being null from 'RESULT_CAPTURE' (there is more than one branch in 'onActivityResult'), it means that there was a failure to capture the image i.e. you've got NOTHING.

Act accordingly. If you stick 'null' to 'setImageBitmap(null)', you'll get black nothing, or you can display toast, or place some 'error' bitmap instead. Or quit, or not quit, or give up, or not give up...

In general, you should not ask such questions, since the answer depends on your intentions. And placing 420 lines of code into your question and ask "what do I do with it?" looks like asking "re-write my app for me".

seanpj
  • 6,735
  • 2
  • 33
  • 54