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 :)