如何分别保存多张选择的照片以上传到android studio中的服务器?

问题描述 投票:0回答:1

我有一个问题已经好几个星期了,但仍然无法解决,做了很多研究并测试了许多代码,但没有解决。我将详细解释我的问题。

我正在制作一个应用程序,其中在布局中将有三张或更多可点击的照片,我正在使用“ ArthurHub / Android-Image-Cropper”图像裁剪库,步骤为:

  1. 单击图像,它提供打开图像画廊的选项来选择照片或拍摄新照片,然后我可以裁剪选定的图像。
    1. 选择第二张照片,此后与上一张相同。
    2. 将照片上传到服务器。

步骤1正常运行,当我尝试从第二张图像中进行选择时出现问题。我正在使用什么:我正在使用两个类:一个请求图像的类和一个返回图像的类:1.将是带有ImageButton的主窗口。2.和另一个将所选图像返回到第一类的类。 (包含调用图库或照相机,剪切图像的功能,以及另一个“ onActivityResult”功能,该功能返回图像地址,并要求提供图片)。到目前为止,一切正常。

问题描述:问题出在所选的第二张图像上。当第二个类将所有内容返回到第一个图像时,就好像第二个图像存储在与第一个图像相同的内存空间中(以前擦除了所有内容),如果我选择了第三个图像,它将删除第二个图像而仅保留第三个图像从今以后。我要做的是选择图像,并同时查看所有图像(可用)以发送到服务器。

我尝试过的解决方案:

  1. 经过几天的搜索,建议对“ onActivityResult”进行多次返回,以便返回选择结果图片,我找不到任何有效的方法,我发现的解释只是中途(包括官方文档未详细说明控制各种退货的步骤功能,非常肤浅),无法控制单独指向图像。
switch (requestCode){
                case (1000):
                    Intent intent1 = new Intent(TirarFoto1.this, RegistrarAutomovelDuasRodas.class);
                    intent1.putExtra("class", classname);
                    intent1.putExtra("imageview", imageview);
                    intent1.putExtra("pathimage", pathimage);
                    startActivity(intent1);

                    break;
                case (2000):
                    Intent intent2 = new Intent(TirarFoto1.this, RegistrarAutomovelDuasRodas.class);
                    intent2.putExtra("class", classname);
                    intent2.putExtra("imageview", imageview);
                    intent2.putExtra("pathimage", pathimage);
                    startActivity(intent2);
                case (3000):
                    Intent intent3 = new Intent(TirarFoto1.this, RegistrarAutomovelDuasRodas.class);
                    intent3.putExtra("class", classname);
                    intent3.putExtra("imageview", imageview);
                    intent3.putExtra("pathimage", pathimage);
                    startActivity(intent3);
                    break;
                default: break;
            }
  1. 我决定将每个图像分别保存在“临时缓存”文件夹(位于它们所在的位置)之外,即使使用“清单”权限,什么都没有发生,权限被拒绝,所以我什至无法创建新文件夹以将图像保存在其中,因此不会保存选择的图像。
 if (ContextCompat.checkSelfPermission(TirarFoto1.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){

                File file = new File(Environment.getExternalStoragePublicDirectory(String.valueOf(imageUri))+"folderName");
                if (!file.exists()){
                    Toast.makeText(this, "exists", Toast.LENGTH_SHORT).show();
                }
                if (success){
                    Toast.makeText(this, "creaty", Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(this, "Erro!!!", Toast.LENGTH_SHORT).show();
                }
            }else {
                requestStoragePermisson();
            }

结果:第一个解决方案无效,第二个解决方案无效。我想要的是:一个模型,一种帮助我的具体方法,有人可以帮助我吗?我已经在这个问题上困扰了很长时间。

android android-studio onactivityresult
1个回答
0
投票

我将ArthurHub-Android-Image-Cropper用于裁剪图像,您可以从此链接中学习

https://github.com/ArthurHub/Android-Image-Cropper/wiki

希望获得帮助

编辑:我有一个使用ArthurHub-Android-Image-Cropper的类,但来自kotlin,我尝试转换为Java像这样

//for identify image
private Int imageNo;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //......

    //set button image 1
    final Button button1 = findViewById(R.id.button_image1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // set image count to 1
            imageNo=1
            getImageClick()
        }
    });

    //set button image 2
    final Button button1 = findViewById(R.id.button_image1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // set image count to 2
            imageNo=2
            getImageClick()
        }
    });

    //set button image 3
    final Button button1 = findViewById(R.id.button_image1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // set image count to 3
            imageNo=3
            getImageClick()
        }
    });
}

//select image form camera or galery 
public void getImageClick() {
    CropImage.startPickImageActivity(this);
}

//this for Crope Image
private void startCropImageActivity(Uri imageUri) {
  CropImage.activity(imageUri)
    .start(this);
}

@Override
@SuppressLint("NewApi")
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //handle result from onGetimageClick(button for select image from camera or galery)
    if (requestCode == CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE && resultCode == AppCompatActivity.RESULT_OK) {
        Uri imageUri = CropImage.getPickImageResultUri(this, data);
        //start Crope image
        startCropImageActivity(imageUri);
    }

    // handle result of CropImageActivity
    else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        Uri resultUri = result.getUri();
        switch (imageNo){
            case (1):
                //here you have resultUri for save image or preview as image1
                break;
            case (2):
                //here you have resultUri for save image or preview as image1
            case (3):
                //here you have resultUri for save image or preview as image1
        }
    }
}

不要忘记添加清单

<activity android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
        android:theme="@style/Theme.AppCompat"/>

希望此帮助

© www.soinside.com 2019 - 2024. All rights reserved.