Ошибка при работе с MutableLiveData: non-static method getInstance() cannot be referenced from a static context

118
09 июня 2019, 00:00

Я пытаюсь создать некий Repository для хранения данных между событиями жизненного цикла Android приложения. Следую архитектуре паттерна MVVM, также использую Dagger2.

WorkData.java

public class WorkData {
    private boolean auth;
    public WorkData() {
        this.auth = false;
    }
    public boolean isAuth() {
        return auth;
    }
    public void setAuth(boolean auth) {
        this.auth = auth;
    }
}

DataRepository.java

import android.arch.lifecycle.MutableLiveData;
import dagger.Provides;
import javax.inject.Singleton;
//SingleTon
@Module
public class DataRepository {
    private MutableLiveData<WorkData> mCurrentObject;
    @Singleton
    @Provides
    public MutableLiveData<WorkData> getInstance() {
        if (mCurrentObject == null) {
            mCurrentObject = new MutableLiveData<>();
            mCurrentObject.setValue(new WorkData());
        }
        return mCurrentObject;
    }
}

WorkDataSharedViewModel.java

import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;
public class WorkDataSharedViewModel extends ViewModel {
    private final MutableLiveData<WorkData> selected = new MutableLiveData<WorkData>();
    private MutableLiveData<WorkData> mCurrentData;
    public MutableLiveData<WorkData> getCurrentData() {
        if (mCurrentData == null) {
            mCurrentData = DataRepository.getInstance();
        }
        return mCurrentData;
    }
    public void set(WorkData item) {
        selected.setValue(item);
    }
    public LiveData<WorkData> get() {
        return selected;
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
***
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //init work variables
        WorkDataSharedViewModel workData = ViewModelProviders.of(this).get(WorkDataSharedViewModel.class);
        workData.set(new WorkData());
***
}

Но при компиляции файла WorkDataSharedViewModel.java возникает ошибка:

non-static method getInstance() cannot be referenced from a static context.

Пожалуйста подскажите, что можно сделать?

Answer 1

Нашёл ошибку в WorkDataSharedViewModel.java, сделал так:

import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;

public class WorkDataSharedViewModel extends ViewModel {
    private final MutableLiveData<WorkData> selected = new MutableLiveData<WorkData>();
    private MutableLiveData<WorkData> mCurrentData;
    public MutableLiveData<WorkData> getCurrentData() {
        if (mCurrentData == null) {
            DataRepository dataRepository = new DataRepository();
            mCurrentData = dataRepository.getInstance();
        }
        return mCurrentData;
    }
    public void set(WorkData item) {
        selected.setValue(item);
    }
    public LiveData<WorkData> get() {
        return selected;
    }
}
READ ALSO
Немного о чистом коде

Немного о чистом коде

Приветсвую, есть у меня в коде класс ConfirmDialog, цель которого при нажатии кнопки Продолжить, выполнить действие, а при нажатии отмена, убрать...

111
Анимация планет солнечной системы

Анимация планет солнечной системы

У меня есть картинка планет солнечной системы

154
Как исправить ошибку: Failed to execute &#39;appendChild&#39; on &#39;Node&#39;

Как исправить ошибку: Failed to execute 'appendChild' on 'Node'

При выполнении appendChild появляется следующая ошибка

139
Как связать скрипт нажатия кнопки и скрипт работы с содержимым страницы в расширении Google Chrome

Как связать скрипт нажатия кнопки и скрипт работы с содержимым страницы в расширении Google Chrome

Сделал расширение, при клике на его иконку всплывает pop-up с кнопкой при нажатии на которую, открываются все ссылки на странице с определенным...

138