Вот то, что я пытался использовать ваши классы, просто изменив модификацию на фоновый поток, чтобы подождать 5 секунд, а затем установив данные (вам нужно подтвердить, что ответ был успешным, так как вы не изменяете данные, если они терпят неудачу, и, следовательно, еслиloginResponseModel имеет значение null, тогда он войдет в метод onChanged, но он ничего не будет делать, поскольку у вас нет условия, если оно равно нулю) вот что я сделал
в Main Activity -> onCreate() Я только что создал модель представления и наблюдал за mutableLiveData
myViewModel.onLoginClick(null);
myViewModel.simpleModelMutableLiveData.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
if(s==null)
Log.v("testinggg","test - onChanged --- Null " );
else
Log.v("testinggg","test - onChanged --- s -> "+s );
}
});
Тогда вот ViewModel ->, в котором у вас будет сама таблица MutableLiveData с именем simpleModelMutableLiveData
MutableLiveData<String> simpleModelMutableLiveData;
public LiveData<String> getUser() {
if (simpleModelMutableLiveData == null) {
simpleModelMutableLiveData = new MutableLiveData<>();
}
return simpleModelMutableLiveData;
}
// this method will return Object of MutableLiveData<String> and let the simpleModelMutableLiveData be the returned object
private void checkLogin(String placeholder) {
simpleModelMutableLiveData = MyRepo.checkLogin(placeholder);
}
public void onLoginClick(View view) {
checkLogin("test");
}
и наконецметод Repo, в котором я возвращаю MutableLiveData и позволяю simpleModelMutableLiveData быть возвратом и инициировать фоновый поток, используя runnable, который будет ждать 5 секунд, прежде чем он установит значение с помощью обработчика (в вашем случае вам нужно будет установить значениеданные после постановки в очередь внутриПереопределенные методы onResponse и onFailure)
следующим образом
public static MutableLiveData<String> checkLogin(String test) {
final MutableLiveData<String> data = new MutableLiveData<>();
Runnable r = new Runnable() {
public void run() {
runYourBackgroundTaskHere(data);
}
};
new Thread(r).start();
return data;
}
private static void runYourBackgroundTaskHere(final MutableLiveData<String> data) {
try {
Thread.sleep(5000);
// Handler handler = new Handler();
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// things to do on the main thread
/* Here i set the data to sss and then null and when
you check the logcat and type the keyword used for
logging which is "testinggg"
you will find it show sss and then null which means
it has entered the onChanged and showed you the log */
data.setValue("sss");
data.setValue(null);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}