Mon MainActivity
étend AppCompatActivity
public class WebsiteViewModel extends AndroidViewModel { private WebsiteRepository repository; private LiveData<List<Website>> allWebsites; public WebsiteViewModel(@NonNull Application application) { super(application); repository = new WebsiteRepository(application); allWebsites = repository.getAllWebsites(); } public void insert(Website website) { repository.insert(website); } public void update(Website website) { repository.update(website); } public void delete(Website website) { repository.delete(website); } public void deleteAllWebsites() { repository.deleteAllWebsites(); } public LiveData<List<Website>> getAllWebsites() { return allWebsites; } }
L'erreur à laquelle je suis confronté est "erreur: types incompatibles: MainActivity ne peut pas être converti en LifecycleOwner . "
Le WebsiteViewModel
est
public class MainActivity extends AppCompatActivity { private WebsiteViewModel websiteViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setHasFixedSize(true); final WebsiteAdapter adapter = new WebsiteAdapter(); this.websiteViewModel = ViewModelProviders.of(this).get(WebsiteViewModel.class); this.websiteViewModel.getAllWebsites().observe(this, new Observer<List<Website>>() { @Override public void onChanged(@Nullable List<Website> websites) { adapter.setWebsites(websites); } }); recyclerView.setAdapter(adapter); } }
Dans mon autre projet, j'utilise un Fragment code > plutôt qu'une
Activité
à convertir en propriétaire du cycle de vie, et ce projet s'exécute sans cette erreur. Cependant, je copie depuis https: // codinginflow.com/tutorials/android/room-viewmodel-livedata-recyclerview-mvvm/part-6-recyclerview-adapter , mais je ne sais pas pourquoi je rencontre ce problème. J'utilise androidx
Si j'ajoute des implémentations LifecycleOwner dans MainActivity alors j'obtiens l'erreur "java.lang.NoSuchMethodError: No super method getLifecycle () Landroidx / lifecycle / Lifecycle; dans la classe Landroidx / core / app / ComponentActivity ; ou ses super classes (la déclaration de 'androidx.core.app.ComponentActivity' apparaît dans /data/app/com.example.project-2/split_lib_dependencies_apk.apk) "
3 Réponses :
Essayez de mettre à jour votre dépendance AppCompat
vers la plus récente. J'ai mis à jour de
'androidx.appcompat: appcompat: 1.0.0-alpha1'
à
'androidx.appcompat: appcompat: 1.1.0-alpha03'
et il l'a corrigé
Si vous trouvez cela maintenant, c'est peut-être parce que vous avez ajouté une version préliminaire de androidx.recyclerview: recyclerview: 1.1.0- *
, qui contient apparemment androidx en amont noyau
pour lequel Activity
implémentait LifecycleOwner
.
implémentation 'androidx.constraintlayout: constraintlayout: 2.0.0-beta2'
provoquant également le problème de rétrogradation vers
implémentation 'androidx.constraintlayout: constraintlayout: 2.0.0-beta1'
pour éviter l'erreur
À première vue, le code semble devoir fonctionner correctement, pouvez-vous partager l'exception complète?
cela peut aider: stackoverflow.com/questions/46465056/…
@ y.allam, comme vous pouvez le voir, mon activité principale étend la compatibilité des applications qui devrait être un propriétaire du cycle de vie afaik
@GilGoldzweig "Erreur: types incompatibles: MainActivity ne peut pas être converti en LifecycleOwner"
Cela ressemble à l'un de ces problèmes qu'un nettoyage et une reconstruction résoudraient
@GilGoldzweig J'ai copié à nouveau mon projet dans un nouveau projet et ce faisant, j'ai découvert la mise à jour de l'implémentation vers 'androidx.appcompat: appcompat: 1.1.0-alpha01' a corrigé le problème :)