【问题标题】:How can I solve nullity error on kotlin while using EditText?使用 EditText 时如何解决 kot​​lin 上的 nullity 错误?
【发布时间】:2022-01-06 16:36:45
【问题描述】:

完全的初学者,在 kotlin 上尝试这个。我正在尝试拍摄照片并将其保存,然后将其加载到房间数据库中。我还需要标记照片并根据它加载它。但是有一个错误,如“引起:java.lang.NullPointerException:findViewById(R.id.metin) 不能为空”。我该如何解决?提前致谢。

class MainActivity : AppCompatActivity() {

    private val cameraRequest = 1888
    lateinit var imageView: ImageView
    lateinit var textbox : EditText

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var dao_object = ImageDatabase.getInstance(application).MyDao()

        textbox = findViewById(R.id.metin)



        setContentView(R.layout.activity_main)
        if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_DENIED
        )
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.CAMERA),
                cameraRequest
            )

        imageView = findViewById(R.id.imageView)
       // var textbox: EditText = findViewById(R.id.text)
        val photoButton: Button = findViewById(R.id.capture_button)

        photoButton.setOnClickListener {
            val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            startActivityForResult(cameraIntent, cameraRequest)
        }


        val saveButton: Button= findViewById(R.id.save_button)
        saveButton.setOnClickListener{
            val takenPhoto: ByteArray = DbBitmapUtility.getBytes(imageView.drawingCache)
            dao_object.insertImage(MyDatabase(takenPhoto, textbox.text.toString()))
        }

        val loadButton: Button= findViewById(R.id.load_button)
        loadButton.setOnClickListener {
            var displayPhoto: ByteArray = dao_object.getImageByTag(textbox.text.toString())
            imageView.setImageBitmap(DbBitmapUtility.getImage(displayPhoto))
        }


    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == cameraRequest) {
            val photo: Bitmap = data?.extras?.get("data") as Bitmap
            imageView.setImageBitmap(photo)
        }
    }

    object DbBitmapUtility {
        // convert from bitmap to byte array
        fun getBytes(bitmap: Bitmap): ByteArray {
            val stream = ByteArrayOutputStream()
            bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream)
            return stream.toByteArray()
        }
        // convert from byte array to bitmap
        fun getImage(image: ByteArray): Bitmap {
            return BitmapFactory.decodeByteArray(image, 0, image.size)
        }
    }
}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    改变代码的排列方式。而不是执行以下操作

    textbox = findViewById(R.id.metin)
    setContentView(R.layout.activity_main)
    

    做:

    setContentView(R.layout.activity_main)
    textbox = findViewById(R.id.metin)
    

    必须先调用setContentView,然后才能尝试对活动的视图进行任何操作。

    【讨论】:

    • 非常感谢!在帮助下,我处理了这个问题。但在那之后,有一个错误“java.lang.NullPointerException:imageView.drawingCache 不能为空”,知道一定是什么问题吗?提前致谢。
    • @JoshConner 这是与您发布的问题不同的问题。你应该问一个不同的问题。
    【解决方案2】:

    在调用setContentView() 之前,您不能使用findViewById。那时还没有要搜索您的视图的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2019-11-02
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多