gpt4 book ai didi

安卓 MVVM : How to handle network request failiures?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:52 24 4
gpt4 key购买 nike

我是 Android Arch 组件的新手。我正在尝试使用 Android View 模型和实时数据制作一个基本的待办事项应用程序。遵循 MVVM 模式时进行网络调用的最佳方式是什么?我需要在网络请求开始时显示一个进度条,并在调用完成时关闭它,如果出现错误,我需要显示一个带有相关错误消息的snackbar .是否可以在不使用 AsyncTask 的情况下执行此操作?

远程存储库类:

public class RemoteRepository {
private APIService apiService;

public RemoteRepository (APIService apiService) {
this.apiService= apiService;
}

public LiveData<List<Project>> getList(String userId) {
final MutableLiveData<List<Project>> data = new MutableLiveData<>();

apiService.getList(userId).enqueue(new Callback<List<Project>>() {
@Override
public void onResponse(Call<List<Project>> call, Response<List<Project>> response) {
data.setValue(response.body());
}

@Override
public void onFailure(Call<List<Project>> call, Throwable t) {
// What to do to show snackbar in activity
}
});
return data;
}

我们是否需要使用异步任务并在其 preExecutepostExecute 回调中管理 UI?或者是否可以使用 Observable Livedata 对象来实现?

最佳答案

你可以这样做。

创建一个具有 Throwable 并希望成功结果对象的类。创建构造函数或 getter setter 方法来设置值。 ProjectRepoClass 就是一个例子。

项目 repo 类::

public class ProjectRepoModel {

private List<Project> mList;
private Throwable mThrowable;

public ProjectRepoModel (List<Project> mList) {
mList= mList;
}

public ProjectRepoModel (Throwable throwable) {
mThrowable = throwable;
}

public List<Project> getList() {
return mList;
}

public Throwable getThrowable() {
return mThrowable;
}

}

根据API结果设置值。可以是错误或成功响应并返回。

返回数据:

public LiveData<List<Project>> getList(String userId) {
final MutableLiveData<ProjectRepoModel > data = new MutableLiveData<>();

apiService.getList(userId).enqueue(new Callback<List<Project>>() {
@Override
public void onResponse(Call<List<Project>> call, Response<List<Project>> response) {
data .setValue( new ProjectRepoModel (response.body()));
}

@Override
public void onFailure(Call<List<Project>> call, Throwable t) {
data .setValue( new ProjectRepoModel (t));
}
});
return data;
}

在UI部分为实时数据创建Observable,并根据错误进行检查并显示结果。

像这样在 UI 中观察结果:

if (mModel.getThrowable() != null)
{
// Show error
} else {

// display success result

}

这就是您如何从 MVVM 中的存储库中获取错误句柄。

关于安卓 MVVM : How to handle network request failiures?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855715/

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