替换Android应用程序中的新图像上的原始图像

时间:2014-09-23 14:40:57

标签: java android

在Android应用程序项目的这个MainActivity java类中,我无法用从智能手机照片库中选择的一个不同的系统替换原始图像。

当我选择一张不同的照片时,我总是拥有原始图像。

    public class MainActivity extends Activity implements OnClickListener {

    Button uploadButton, btnselectpic;
    ImageView imageview;
    private ProgressDialog dialog = null;
    private String imagepath = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        uploadButton = (Button) findViewById(R.id.uploadButton);
        btnselectpic = (Button) findViewById(R.id.btnselectpic);
        imageview = (ImageView) findViewById(R.id.imageview);

        btnselectpic.setOnClickListener(this);
        uploadButton.setOnClickListener(this);


    @Override
    public void onClick(View arg0) {

                if (arg0 == btnselectpic) {
            selectImage();
        } else if (arg0 == uploadButton) {
            dialog = ProgressDialog.show(MainActivity.this, "",
                    "Uploading file...", true);
            messageText.setText("uploading started.....");
            new Thread(new Runnable() {
                public void run() {
                }
            }).start();
        }
    }

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

        if (requestCode == 1 && requestCode == 2 && resultCode == RESULT_OK) {
            Uri selectedImageUri = data.getData();
            imagepath = getPath(selectedImageUri);
            Bitmap bitmap = BitmapFactory.decodeFile(imagepath);
            imageview.setImageBitmap(bitmap);
            messageText.setText("Uploading file path:" + imagepath);
        }
    }

    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(uri, projection, null, null,
                null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }


   private void selectImage() {

        final CharSequence[] options = { "Take Photo", "Choose from Gallery",
                "Cancel" };

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.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));
                    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();
                }
            }
        });
        builder.show();
    }

1 个答案:

答案 0 :(得分:0)

问题是你的onActivityResult()永远不会做任何事情。

您可以通过以下方式启动此方法:

if (requestCode == 1 && requestCode == 2 && resultCode == RESULT_OK) {
    // ...
}

requestCode不能同时为1和2,因此此条件始终为false。

你可能正在寻找更像这样的东西:

if ((requestCode == 1 && resultCode == RESULT_OK) ||
        (requestCode == 2 && resultCode == RESULT_OK)) {
    // ...
}