Я пытаюсь разрешить выбор нескольких изображений в моем приложении для Android, которое отлично работает, но по некоторым причинам я не могу получить данные изображений, выбранных в результате действия. ClipData кажется пустым, когда я выбираю несколько изображений, но данные работают нормально, когда я выбираю одно изображение. Вот код, который у меня сейчас есть.

    private void selectImage() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {

            if (data.getClipData() != null) {
                ClipData mClipData = data.getClipData();
                Toast.makeText(getApplicationContext(), ""+mClipData.getItemCount(), Toast.LENGTH_SHORT).show();
            } else if (data.getData() != null) {
                Toast.makeText(getApplicationContext(), "One Image", Toast.LENGTH_SHORT).show();
            }


        }
    }

По некоторым причинам, когда я выбираю одно изображение, я получаю всплывающее сообщение Одно изображение , но когда я выбираю несколько изображений, тоста нет, тогда как я ожидаю, что данные клипа покажут количество выбранных элементов (изображений).

1
Serenity Emmanuel 11 Окт 2021 в 06:54

2 ответа

Лучший ответ

Вы должны удалить галочку "data.getData ()! = Null", надеюсь, все в порядке.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null) {

        if (data.getClipData() != null) {
            ClipData mClipData = data.getClipData();
            Toast.makeText(getApplicationContext(), ""+mClipData.getItemCount(), Toast.LENGTH_SHORT).show();
        } else if (data.getData() != null) {
            Toast.makeText(getApplicationContext(), "One Image", Toast.LENGTH_SHORT).show();
        }


    }
}
2
Cường Nguyễn 11 Окт 2021 в 04:28

Попробуйте этот код для выбора нескольких изображений. Вы можете использовать Image Uri и Image Path, это зависит от ваших потребностей, это путь или uri.

  val PICK_IMAGE_MULTIPLE = 2
  private var pathList: ArrayList<String> = ArrayList()


override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val imagesSelectButton:Button = findViewById(R.id.btn_selectImages)
        imagesSelectButton.setOnClickListener {
            photoIntentMethod()
        }

    }

  override fun onActivityResult(requestCode: Int, resultCode: Int, intentData: Intent?) {
        super.onActivityResult(requestCode, resultCode, intentData)

        if (resultCode == RESULT_OK) {
            if (requestCode == PICK_IMAGE_MULTIPLE) {

                if (intentData!!.clipData != null) {
                    val mClipData = intentData.clipData
                    for (i in 0 until mClipData!!.itemCount) {
                        val item = mClipData.getItemAt(i)
                        val imageUri = item.uri
                        pathList.add(getImagePath(imageUri))
                    }
                } else if (intentData.data != null) {
                    val imageUri = intentData.data
                    pathList.add(getImagePath(imageUri!!))
                }
            }
        }

    }


    @SuppressLint("Range")
    private fun getImagePath(uri: Uri): String {
        var cursor: Cursor? = contentResolver.query(uri, null, null, null, null)
        cursor?.moveToFirst()
        var documentId: String = cursor!!.getString(0)
        documentId = documentId.substring(documentId.lastIndexOf(":") + 1)
        cursor.close()
        cursor = contentResolver.query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", arrayOf(documentId), null
        )
        cursor?.moveToFirst()
        val path: String = cursor!!.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))
        cursor.close()
        return path
    }

    private fun photoIntentMethod() {
        val intent = Intent()
        intent.type = "image/*"
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
        intent.action = Intent.ACTION_GET_CONTENT
        startActivityForResult(
            Intent.createChooser(intent, "Select Picture"),
            PICK_IMAGE_MULTIPLE
        )
    }
0
Yaqoob Bhatti 11 Окт 2021 в 04:32