RxJava Наблюдаемый с ViewModel - PullRequest
0 голосов
/ 23 октября 2019

Я изучаю RxJava и ViewModel. Итак, для моего практического примера я просто хотел создать класс данных, использовать ViewModel для получения этих данных и реализовать RxJava.

В моем CustomViewModel я жестко закодировал имя в классе данных с помощью:

UserModel userModel = new UserModel("ABC");
userModelMutableLiveData.setValue(userModel);

У меня был наблюдатель и наблюдаемый в моей основной деятельности, но когда я только знаю, использовать just() жестко закодировать передаваемые данные, например just("ABC").

Я не знаю, как сделать наблюдаемый вызов из CustomViewModel. Мой учитель сказал мне сделать для него интерфейс , но я не очень хорошо разбираюсь в интерфейсе и не знаю, как это сделать.

Спасибо!

Вот мой UserModel класс данных

public class UserModel {

    private String name;

    public UserModel(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Это мой CustomViewModel класс:

public class CustomViewModel extends ViewModel {

    public MutableLiveData<UserModel> userModelMutableLiveData;

    public MutableLiveData<UserModel> getUserModelMutableLiveData() {

        if(userModelMutableLiveData == null){
            userModelMutableLiveData = new MutableLiveData<>();
            loadData();
        }

        return userModelMutableLiveData;
    }

    private void loadData() {
        //I'm trying to make this as simple as I can 
        UserModel userModel = new UserModel("ABC");
        userModelMutableLiveData.setValue(userModel);
    }

    @Override
    protected void onCleared() {
        super.onCleared();
    }

}

Иэто мой MainActivity, где я называю Наблюдатель и Наблюдаемый

public class MainActivity extends AppCompatActivity {

    private String TAG = "MainActivity";
    Disposable disposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Observable and Observer
        Observer<String> namesObserver = getNamesObserver();
        Observable<String> namesObservable = getNamesObservable();

        //Subscribe step
        namesObservable
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(namesObserver);

    }

    //emit data
    private Observable<String> getNamesObservable(){
        return Observable.just(//I don't know what to do);
    }

    //observer
    private Observer<String> getNamesObserver(){

        return new Observer<String>(){
            @Override
            public void onSubscribe(Disposable disposable) {
                //bonding
                MainActivity.this.disposable = disposable;
                Log.d(TAG, "onSubscribe");
            }

            @Override
            public void onNext(String s) {
                Log.d(TAG, "onNext " + s);
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG, "onError " + e.getMessage());
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "onComplete");
            }
        };

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        disposable.dispose();
    }
}
...