Я изучаю 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();
}
}