web-dev-qa-db-fra.com

Propriétaire du cycle de vie requis trouvé Activité

J'utilise Android bibliothèque androidx.appcompat: appcompat: 1.0.2. Je travaille sur un échantillon du gestionnaire de travaux des codelabs. J'ai besoin d'obtenir des données en direct de ViewModel et j'utilise ceci

    mViewModel!!.getOutputWorkInfo()?.observe(this, Observer<List<WorkInfo>> {
 })

mais cette variable affiche une erreur - non-concordance de type. Obligatoire: propriétaire du cycle de vie. Trouvé: BlurActivity

J'ai googlé tout en disant qu'il n'est pas nécessaire d'étendre le propriétaire du cycle de vie, par défaut, l'activité appcompact implémente le propriétaire du cycle de vie.

Et j'ai également travaillé cela dans un autre projet, aucun problème n'a été trouvé. Je ne sais pas pourquoi j'obtiens cette erreur dans ce projet.

"

import Android.os.Bundle
import Android.view.View
import Android.widget.Button
import Android.widget.ImageView
import Android.widget.ProgressBar
import Android.widget.RadioGroup

import com.bumptech.glide.Glide

import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.work.WorkInfo

class BlurActivity : AppCompatActivity() {

    private var mViewModel: BlurViewModel? = null
    private var mImageView: ImageView? = null
    private var mProgressBar: ProgressBar? = null
    private var mGoButton: Button? = null
    private var mOutputButton: Button? = null
    private var mCancelButton: Button? = null

    /**
     * Get the blur level from the radio button as an integer
     * @return Integer representing the amount of times to blur the image
     */
    private val blurLevel: Int
        get() {
            val radioGroup = findViewById<RadioGroup>(R.id.radio_blur_group)

            return when (radioGroup.checkedRadioButtonId) {
                R.id.radio_blur_lv_1 ->  1
                R.id.radio_blur_lv_2 ->  2
                R.id.radio_blur_lv_3 ->  3
                else -> 1
            }
        }


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

        // Get the ViewModel
        mViewModel = ViewModelProviders.of(this).get(BlurViewModel::class.Java)

        // Get all of the Views
        mImageView = findViewById(R.id.image_view)
        mProgressBar = findViewById(R.id.progress_bar)
        mGoButton = findViewById(R.id.go_button)
        mOutputButton = findViewById(R.id.see_file_button)
        mCancelButton = findViewById(R.id.cancel_button)

        // Image uri should be stored in the ViewModel; put it there then display
        val intent = intent
        val imageUriExtra = intent.getStringExtra(Constants.KEY_IMAGE_URI)
        mViewModel!!.setImageUri(imageUriExtra)
        if (mViewModel!!.imageUri != null) {
            Glide.with(this).load(mViewModel!!.imageUri).into(mImageView!!)
        }

        mViewModel!!.getOutputWorkInfo()?.observe(this, Observer<List<WorkInfo>> {
            // If there are no matching work info, do nothing
            if (it == null || it.isEmpty()) return@Observer

            // We only care about the first output status.
            // Every continuation has only one worker tagged TAG_OUTPUT
            val workInfo = it[0]

            val finished = workInfo.state.isFinished
            if (!finished) showWorkInProgress() else showWorkFinished()
        })


        // Setup blur image file button
        mGoButton!!.setOnClickListener { view -> mViewModel!!.applyBlur(blurLevel) }
    }

    /**
     * Shows and hides views for when the Activity is processing an image
     */
    private fun showWorkInProgress() {
        mProgressBar!!.visibility = View.VISIBLE
        mCancelButton!!.visibility = View.VISIBLE
        mGoButton!!.visibility = View.GONE
        mOutputButton!!.visibility = View.GONE
    }

    /**
     * Shows and hides views for when the Activity is done processing an image
     */
    private fun showWorkFinished() {
        mProgressBar!!.visibility = View.GONE
        mCancelButton!!.visibility = View.GONE
        mGoButton!!.visibility = View.VISIBLE
    }
}

"

4
Karthick Ramanathan

Ce problème se produit en cas de non-concordance entre la dépendance appcompat et Lifecycle.

Soit utilisez cet ensemble de dépendances:

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version
implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'

Ou:

implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation "Android.Arch.lifecycle:extensions:$lifecycle_version"
0
Ashutosh Ojha