метод 'логическое android.graphics.Bitmap.compress (android.graphics.Bitmap $ CompressFormat, int, java.io.OutputStream) - PullRequest
0 голосов
/ 03 мая 2019

У меня в коде ошибка, кто-то подскажет, как ее решить?Спасибо всем, кто может помочь.

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
        at map.app.fragments.ReportFragment.putImgToBytearray(ReportFragment.kt:177)

ошибка линии

bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream)

код

private fun putImgToBytearray(): ByteArray {
    val stream = ByteArrayOutputStream()
    val drawable = this.imgThumb!!.drawable as BitmapDrawable
    val bitmap = drawable.bitmap
    bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream)
    return stream.toByteArray()
}

onActivityResult code

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == IMAGE_PICK_CODE && resultCode == RESULT_OK) {


        try {

            //Getting the Bitmap from Gallery
            val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, this.imageUri) as Bitmap?
            this.imgThumb!!.setImageBitmap(bitmap)
            this.pictureTaken = true
        } catch (e:IOException) {
            e.printStackTrace()
        }
    } else {
        Toast.makeText(context, "Error loading image", Toast.LENGTH_LONG)
    }
}

методдля выбора изображения из галереи.это просто адаптация

fun openCamera() {
    try {
        val imageFile = createImageFile()
        val callCameraIntent =  Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        if(callCameraIntent.resolveActivity(activity.packageManager) != null) {
            val authorities = activity.packageName + ".fileprovider"
            this.imageUri = FileProvider.getUriForFile(context, authorities, imageFile)
            callCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
            startActivityForResult(callCameraIntent, IMAGE_PICK_CODE)
        }
    } catch (e: IOException) {
        Toast.makeText(context, "Could not create file!", Toast.LENGTH_SHORT).show()
    }
}

1 Ответ

0 голосов
/ 05 мая 2019

Могу поспорить, что MediaStore.Images.Media.getBitmap неправильно получает растровое изображение и возвращает ноль.

Поэтому, если вы удалите ? в MediaStore.Images.Media.getBitmap(context.contentResolver, this.imageUri) as Bitmap?, вы получите исключение времени выполнения, как утверждает ваш предыдущий вопрос.

Так что измените приведение на:

MediaStore.Images.Media.getBitmap(context.contentResolver, this.imageUri) as Bitmap

Чтобы убедиться, что вы никогда не получите нулевое растровое изображение, затем возвращайтесь, чтобы исследовать getBitmap метод

Я понятия не имею, что делаетcreateImageFile метод подходит, но я предлагаю вам просто сделать следующее, чтобы проверить, работает ли он:

MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse("file://"+uri));

Наконец, я советую вообще не использовать MediaStore.Images.Media.getBitmap.

См. Не рекомендуется .переключитесь на библиотеки загрузки изображений или используйте ImageDecoder # createSource (ContentResolver, Uri)

В указанной ссылке есть руководства.Как этот:

public static Bitmap decodeBitmap (ImageDecoder.Source src)

Также убедитесь, что вы делаете все это в рабочем потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...