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
}
}
"
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"