#java #android #image #android-studio
Вопрос:
Я пытаюсь разрешить выбор нескольких изображений в своем приложении для Android, которое работает нормально, но по некоторым причинам я не могу получить данные изображений, выбранных в результате действия. Данные клипа кажутся пустыми, когда я выбираю несколько изображений, но данные работают нормально, когда я выбираю одно изображение. Вот код, который у меня сейчас есть.
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 amp;amp; resultCode == RESULT_OK
amp;amp; data != null amp;amp; 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();
}
}
}
По некоторым причинам, когда я выбираю одно изображение, я получаю тост за одно изображение, но когда я выбираю несколько изображений, то тоста нет, тогда как я ожидаю, что в clipdata будет отображаться количество выбранных элементов(изображений).
Комментарии:
1. Если вы хотите интегрировать стороннюю библиотеку , попробуйте это
2. Спасибо, действительно ценю, но по умолчанию это невозможно, потому что библиотека для таких, похоже, далеко
Ответ №1:
Вам следует удалить флажок «data.getData() != null», надеюсь, все в порядке
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST amp;amp; resultCode == RESULT_OK
amp;amp; 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:
Котлин
Попробуйте этот код для выбора нескольких изображений. Вы можете использовать Uri изображения и путь к изображению, это зависит от ваших потребностей, это путь или 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
)
}