Android:一次活动中上传两张图片

时间:2020-04-23 14:25:12

标签: java android

我需要在一个活动中插入2张图片。仅插入1张图片时,此代码(在添加开关盒之前)有效。但是,当我修改此代码以插入2张图片时,它失败了。 问题是,我可以从图库中选择图片,但不会显示我选择的图片。在其他一些与我类似的问题中,我看到很少有人推荐使用开关盒和在onActivityResult中有2个不同的请求代码,请尝试一下。有人可以帮助我找到代码的问题以及如何解决此问题吗?这样的代码正确吗?

MainActivity

public class MainActivity extends AppCompatActivity {

    ImageView mImageView, mImageView2;
    Button mBtnAdd, mBtnList;

    final int REQUEST_CODE_GALLERY = 999;
    final int REQUEST_CODE_GALLERY2 = 666;

    public static SQLiteHelper mSQLiteHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBtnAdd = findViewById(R.id.btnAdd);
        mBtnList = findViewById(R.id.btnList);
        mImageView = findViewById(R.id.imageView);
        mImageView2 = findViewById(R.id.imageView2);

        //creating database
        mSQLiteHelper = new SQLiteHelper(this, "IMAGEDDB.sqlite", null, 1);

        //creating table in database
        mSQLiteHelper.queryData("CREATE TABLE IF NOT EXISTS tb_project(id_project INTEGER PRIMARY KEY AUTOINCREMENT, image BLOB, image2 BLOB)");

        //select image by on imageview click
        mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ActivityCompat.requestPermissions(
                        MainActivity.this,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                        REQUEST_CODE_GALLERY
                );
            }
        });

        //select image by on imageview click
        mImageView2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ActivityCompat.requestPermissions(
                        MainActivity.this,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                        REQUEST_CODE_GALLERY2
                );
            }
        });
        //add record to sqlite
        mBtnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    mSQLiteHelper.insertData(
                            imageViewToByte(mImageView),
                            imageViewToByte2(mImageView2)
                    );
                    Toast.makeText(MainActivity.this, "Added successfully", Toast.LENGTH_SHORT).show();
                    //reset views
                    mImageView.setImageResource(R.drawable.addphoto);
                    mImageView2.setImageResource(R.drawable.ic_add_to_photos);
                }
                catch (Exception e){
                    e.printStackTrace();
                }
            }
        });

        //show record list
        mBtnList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //start recordlist activity
                startActivity(new Intent(MainActivity.this, RecordListActivity.class));
            }
        });
    }

    public static byte[] imageViewToByte(ImageView image) {
        Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        return byteArray;
    }

    public static byte[] imageViewToByte2(ImageView image2) {
        Bitmap bitmap2 = ((BitmapDrawable)image2.getDrawable()).getBitmap();
        ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
        bitmap2.compress(Bitmap.CompressFormat.PNG, 100, stream2);
        byte[] byteArray2 = stream2.toByteArray();
        return byteArray2;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch(requestCode){
            case REQUEST_CODE_GALLERY:
                if (requestCode == REQUEST_CODE_GALLERY){
                    if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                        //gallery intent
                        Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
                        galleryIntent.setType("image/*");
                        startActivityForResult(galleryIntent, REQUEST_CODE_GALLERY);
                    }
                    else {
                        Toast.makeText(this, "Don't have permission to access file location", Toast.LENGTH_SHORT).show();
                    }
                    return;
                }break;

            case REQUEST_CODE_GALLERY2:
                if (requestCode == REQUEST_CODE_GALLERY2){
                    if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                        //gallery intent
                        Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
                        galleryIntent.setType("image/*");
                        startActivityForResult(galleryIntent, REQUEST_CODE_GALLERY2);
                    }
                    else {
                        Toast.makeText(this, "Don't have permission to access file location", Toast.LENGTH_SHORT).show();
                    }
                    return;
                }break;
        }

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
            case REQUEST_CODE_GALLERY:
                if (requestCode == REQUEST_CODE_GALLERY && resultCode == RESULT_OK){
                    Uri imageUri = data.getData();
                    CropImage.activity(imageUri)
                            .setGuidelines(CropImageView.Guidelines.ON) 
                            .setAspectRatio(16,9)
                            .start(this);
                }
                if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
                    CropImage.ActivityResult result =CropImage.getActivityResult(data);
                    if (resultCode == RESULT_OK){
                        Uri resultUri = result.getUri();
                        //set image choosed from gallery to image view
                        mImageView.setImageURI(resultUri);
                    }
                    else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
                        Exception error = result.getError();
                    }
                }break;

            case REQUEST_CODE_GALLERY2:
                if (requestCode == REQUEST_CODE_GALLERY2 && resultCode == RESULT_OK){
                    Uri imageUri2 = data.getData();
                    CropImage.activity(imageUri2)
                            .setGuidelines(CropImageView.Guidelines.ON)
                            .setAspectRatio(16,9)
                            .start(this);
                }
                if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
                    CropImage.ActivityResult result =CropImage.getActivityResult(data);
                    CropImage.ActivityResult result2 =CropImage.getActivityResult(data);
                    if (resultCode == RESULT_OK){
                        Uri resultUri2 = result.getUri();
                        //set image choosed from gallery to image view
                        mImageView2.setImageURI(resultUri2);
                    }
                    else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
                        Exception error = result.getError();
                    }
                }break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

activity_main

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/addphoto" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/imageView"
            android:src="@drawable/ic_add_to_photos" />

        <Button
            android:id="@+id/btnAdd"
            android:layout_below="@id/imageView2"
            android:text="Save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/btnList"
            android:layout_below="@id/btnAdd"
            android:text="Show List"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </RelativeLayout>

顺便说一句,我使用https://github.com/ArthurHub/Android-Image-Cropper库裁剪图像。

0 个答案:

没有答案