gpt4 book ai didi

java - 使用 Retrofit 请求响应刷新实时数据

转载 作者:行者123 更新时间:2023-11-30 05:08:35 25 4
gpt4 key购买 nike

我有一个简单的应用程序,它显示电影列表。当用户单击一个按钮时,它应该刷新列表,这意味着再次转到 Retrofit 并获取新列表。问题是,此刷新不起作用。当我打开应用程序时,它只获取一次列表。

public class MoviesViewModel extends AndroidViewModel {
private MutableLiveData<Resource<List<Movie>>> mLastdMovieListObservable;
private Repository mRepository;

public MoviesViewModel(Application application) {
super(application);
mRepository = new Repository();
}

public LiveData<Resource<List<Movie>>> getMovieListLiveData() {
if (mLastdMovieListObservable == null) {
mLastdMovieListObservable = mRepository.getMovieList();
}
return mLastdMovieListObservable;
}
}

和存储库:

public MutableLiveData<Resource<List<Movie>>> getMovieList() {
final MutableLiveData<Resource<List<Movie>>> data = new MutableLiveData<>();
data.setValue(Resource.loading(null));

mInterface.getMovies(.....).enqueue(new Callback<MovieListResponse>() {
@Override
public void onResponse(Call<MovieListResponse> call, Response<MovieListResponse> response) {
if (response.isSuccessful()) {
data.postValue(Resource.success(response.body().getResult()));
} else {
data.postValue(Resource.error(response.message(), null));
}
}
@Override
public void onFailure(Call<MovieListResponse> call, Throwable t) {
data.postValue(Resource.error(t.getMessage(), null));
}
});

return data;
}

然后在 fragment 中它只是:

mMoviesViewModel.getMovieListLiveData().observe(this, moviesResource -> {
if (moviesResource.status == Status.SUCCESS) {
.....
.....

然后按钮点击部分,当我需要再次获取列表时,我不确定如何实现它。我试过的任何东西都不起作用。存储库立即将数据返回为空。

最佳答案

您可以使用重试方法,我快速更改了您的代码以获取重试示例,并检查此源以获得更好的代码。 LINK

Transformations.switchMap 监听重试,当它改变时,swithMap 将再次调用。在 UI ViewModel 中应该像下面这样配置,但在按钮中你只需要调用重试。

mMoviesViewModel.getMovieListLiveData().observe(this, moviesResource -> {
if (moviesResource.status == Status.SUCCESS) {
.....
.....

在按钮中:

mMoviesViewModel.retry()

还有 View 模型:

public class MoviesViewModel extends AndroidViewModel {
private MutableLiveData<Resource<List<Movie>>> mLastdMovieListObservable;
private Repository mRepository;
private Boolean mRetry = false;

public MoviesViewModel(Application application) {
super(application);
mRepository = new Repository();
mLastdMovieListObservable = Transformations.switchMap(mRetry){
mLastdMovieListObservable = mRepository.getMovieList()
}
}

public LiveData<Resource<List<Movie>>> getMovieListLiveData() {
return mLastdMovieListObservable;
}

public void retry(){
mRetry.setValue(true)
}}

关于java - 使用 Retrofit 请求响应刷新实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com