Hoo
Hoo

Reputation: 1840

why Image can return to previous activity but not intent to new activity

Why image can be pass to previous activity but not intent to new activity?

ImageFitScreen.java

    b = (ImageView) findViewById(R.id.imageView3);
      public void selectImage() {

            final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };
            AlertDialog.Builder builder = new AlertDialog.Builder(ImageFitScreen.this);
            builder.setTitle("Add Photo!");
            builder.setItems(options, new DialogInterface.OnClickListener() {

                @Override

                public void onClick(DialogInterface dialog, int item) {

                    if (options[item].equals("Take Photo"))

                    {

                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                        File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");


                        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                        //pic = f;
                      //  Toast.makeText(getApplicationContext(), Uri.fromFile(f) +"", Toast.LENGTH_LONG).show();
                        startActivityForResult(intent, 1);


                    } else if (options[item].equals("Choose from Gallery"))

                    {

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

                        startActivityForResult(intent, 2);


                    } else if (options[item].equals("Cancel")) {

                        dialog.dismiss();
                        finish();

                    }

                }

            });
       @Override

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

            super.onActivityResult(requestCode, resultCode, data);

            if (resultCode == RESULT_OK) {
                if (requestCode == 1) {
                    //h=0;
                    File f = new File(Environment.getExternalStorageDirectory().toString());
                    for (File temp : f.listFiles()) {
                        if (temp.getName().equals("temp.jpg")) {
                            f = temp;
                            File photo = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
                            //pic = photo;
                            break;
                        }
                    }

                    try {
                        Bitmap bitmap;
                        BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
                        bitmapOptions.inJustDecodeBounds = false;
                        bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
                        bitmapOptions.inDither = true;
                        bitmapOptions.inSampleSize=8;
                        bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions);
                        Global.img = bitmap;

                        b.setImageBitmap(bitmap);
                        String path = android.os.Environment.getExternalStorageDirectory() + File.separator + "Phoenix" + File.separator + "default";
                        //p = path;
                        f.delete();
                        OutputStream outFile = null;
                        File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                        try {

                            outFile = new FileOutputStream(file);
                            bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
                            //pic=file;
                            outFile.flush();
                            outFile.close();


                        } catch (FileNotFoundException e) {
                            e.printStackTrace();

                        } catch (IOException e) {
                            e.printStackTrace();

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    } catch (Exception e) {
                        e.printStackTrace();

                    }

                } else if (requestCode == 2) {

                    Uri selectedImage = data.getData();
                    // h=1;
                    //imgui = selectedImage;
                    String[] filePath = {MediaStore.Images.Media.DATA};
                    Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null);
                    c.moveToFirst();
                    int columnIndex = c.getColumnIndex(filePath[0]);
                    String picturePath = c.getString(columnIndex);
                    c.close();
                    Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
                    Log.w("path of image ******", picturePath + "");
                    b.setImageBitmap(thumbnail);
                }


            }
            else
            {
                finish();
            }


        }

 ok.setOnClickListener(new View.OnClickListener()  //back to Project1.java
        {
            public void onClick(View arg0)
            {
                Intent returnIntent=new Intent();
                text=t.getText().toString();
                b.setDrawingCacheEnabled(true);
                b.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                b.layout(0, 0, b.getMeasuredWidth(), b.getMeasuredHeight());
                b.buildDrawingCache(true);
                returnIntent.putExtra("text", text);
                if (b.getDrawingCache() != null) {
                    Bitmap bitmap = Bitmap.createBitmap(b.getDrawingCache());
                    if (bitmap == null) {
                        Log.e("TAG", "getDrawingCache() == null");
                    }
                    Global.img = bitmap;
                }
                setResult(Activity.RESULT_OK, returnIntent);
                finish();
            }
        });

Project1.java

    public void onActivityResult(int requestCode,int resultCode, Intent data)
        {
            if(requestCode==PROJECT_REQUEST_CODE) {
                if(data!=null&&data.hasExtra("text")) {
                    c = data.getStringExtra("text");
                    txt1.setText(c);
                    viewImage.setImageBitmap(Global.img); //image can be returned
                }


            }
            else if (requestCode==CAMERA_REQUEST_CODE)
            {

            }
        }

  b.setOnClickListener(new View.OnClickListener() {  // back to Claims.java
            public void onClick(View arg0) {
                Intent returnIntent = new Intent();
                a = "Project";
                text = txt.getText().toString(); // amount
                returnIntent.putExtra("text", text);
                returnIntent.putExtra("a", a);
                final int k1 = getIntent().getExtras().getInt("k");
                returnIntent.putExtra("k1", k1);
                returnIntent.putExtra("c",c);
                setResult(Activity.RESULT_OK, returnIntent);
                finish();
            }
        });

Claims.java

      @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
                   switch (requestCode) {
                    case 0:
                        result = data.getStringExtra("text");
                        name = data.getStringExtra("a");
                        description=data.getStringExtra("c");
                        if (Global.img != null) {
                            v.setImageBitmap(Global.img); //image can shown here
                        }

                        c.setText("            " + name + "------" + "RM " + result);
                        break;
}
}

 c.setOnClickListener(new View.OnClickListener() { //pass image to EditClaims.java
                                 @Override
                                 public void onClick(View v) {
                                     if ((name != null && name.trim().length() > 0) && (result != null && result.trim().length() > 0)) {
                                         Toast.makeText(getActivity().getApplicationContext(), "not null", Toast.LENGTH_LONG).show();
                                         Global.img=null;
                                         Intent intent = new Intent(getActivity(), EditClaims.class);
                                         v.setDrawingCacheEnabled(true);
                                         v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                                                 View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                                         v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
                                         v.buildDrawingCache(true);
                                         intent.putExtra("name", name);
                                         intent.putExtra("result", result);
                                         intent.putExtra("description", description);
                                         if (v.getDrawingCache() != null) {
                                             Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
                                             if (bitmap == null) {
                                                 Log.e("TAG", "getDrawingCache() == null");
                                             }
                                             Global.img = bitmap;
                                             startActivity(intent);
                                         }

                                         }
                                     else {
                                         Toast.makeText(getActivity().getApplicationContext(), "null", Toast.LENGTH_LONG).show();
                                     }
                                 }
                                     } );

EditClaims.java

  viewImage.setImageBitmap(Global.img);

Global.java

public class Global {

    static Bitmap img;
}

But what I get in viewImage is (" " + name + "------" + "RM " + result) which is get from the c.setText. Can someone help me to figure out the problem?

Activity Flow: ImageFitScreen----->Back to project1----->Back to Claims----->Claims intent to EditClaims

Screen shot of Claims

Note that the image beside Amount is return from Project1. Since c.setText is not null, it can intent to EditClaims.java.

enter image description here

It works like charm, but only for captured image.

enter image description here

Now I try with the image from gallery

enter image description here

When I click c, it shows me this. It didn't intent to EditClaims.java

enter image description here

Upvotes: 0

Views: 548

Answers (1)

Mike M.
Mike M.

Reputation: 39191

The problem is with the OnClickListener you're setting on c. That listener has a method public void onClick(View v), in which you're confusing your v variables.

Judging from the onActivityResult() method, you have a class member ImageView named v. But, within the onClick() method, an unqualified v is going to be the View v passed into the method, not the class member v. The View v passed into the onClick() method of an OnClickListener is the View that is being clicked, so this explains why you're seeing the content of c in the next Activity.

The simplest solution would be to change the parameter variable of the onClick() method to a different name. For example:

public void onClick(View view)

Upvotes: 1

Related Questions