Активность не может быть приведена к LifecycleOwner - PullRequest
0 голосов
/ 03 февраля 2019

My MainActivity extends AppCompatActivity

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);
    }
}

Ошибка, с которой я сталкиваюсь: «ошибка: несовместимые типы: MainActivity не может быть преобразовано в LifecycleOwner.»

The WebsiteViewModelis

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

В моем другом проекте я использую Fragment вместо Activity для приведения к владельцу жизненного цикла, и этот проект выполняется без этой ошибки.Однако я копирую с https://codinginflow.com/tutorials/android/room-viewmodel-livedata-recyclerview-mvvm/part-6-recyclerview-adapter,, но я не знаю, почему у меня возникла эта проблема.Я использую androidx

Если я добавлю реализации LifecycleOwner в MainActivity, то получаю ошибку "java.lang.NoSuchMethodError: Нет супер-метода getLifecycle () Landroidx / lifecycle / Lifecycle; в классе Landroidx / core / app / ComponentActivity;или его суперклассы (объявление 'androidx.core.app.ComponentActivity' появляется в /data/app/com.example.project-2/split_lib_dependencies_apk.apk)"

Ответы [ 3 ]

0 голосов
/ 05 июля 2019

Если вы обнаружите это сейчас, это может быть потому, что вы добавили предварительную версию androidx.recyclerview:recyclerview:1.1.0-*, которая, очевидно, содержит исходный androidx core, в котором Activity не реализована LifecycleOwner. * 1005.*

0 голосов
/ 23 августа 2019

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2' также вызывает проблему понизить до

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1', чтобы избежать ошибки

0 голосов
/ 10 апреля 2019

Попробуйте обновить свою AppCompat зависимость до самой последней.Я обновил с 'androidx.appcompat:appcompat:1.0.0-alpha1' до 'androidx.appcompat:appcompat:1.1.0-alpha03' и он исправил это

...