Android 架构组件 LiveData 进度更新
Android Architecture Components LiveData progress update
我不确定我是否遗漏了什么。我似乎找不到任何关于如何在使用 LiveData 提取数据时发布进度的示例或教程。
例如;假设我的数据库中有 5000 条记录,我想显示我正在从数据库中读取的记录,而不是显示中间进度条。
示例展示了如何从数据库或网络和 return 列表加载数据。但是,没有提到如何像在 AsyncTask 上那样发布进度。
据我了解,您通过以下方式获取所有数据:
ViewModelProviders.of(this).get(MyViewModel.class);
model.getData().observe(this, data -> {
// update UI
});
我想可以创建某种 listener/callback 但架构组件不应该让您免于此吗?
我错过了什么吗?
应用架构指南显示了 how to expose network status 的示例。我想您可以通过在加载时添加进度百分比来修改以下通用 class。
//a generic class that describes a data with a status
public class Resource<T> {
@NonNull public final Status status;
@Nullable public final T data;
@Nullable public final String message;
private Resource(@NonNull Status status, @Nullable T data, @Nullable String message) {
this.status = status;
this.data = data;
this.message = message;
}
public static <T> Resource<T> success(@NonNull T data) {
return new Resource<>(SUCCESS, data, null);
}
public static <T> Resource<T> error(String msg, @Nullable T data) {
return new Resource<>(ERROR, data, msg);
}
public static <T> Resource<T> loading(@Nullable T data) {
return new Resource<>(LOADING, data, null);
}
}
另外,您可以查看完整的实现 here。
我不确定我是否遗漏了什么。我似乎找不到任何关于如何在使用 LiveData 提取数据时发布进度的示例或教程。
例如;假设我的数据库中有 5000 条记录,我想显示我正在从数据库中读取的记录,而不是显示中间进度条。
示例展示了如何从数据库或网络和 return 列表加载数据。但是,没有提到如何像在 AsyncTask 上那样发布进度。
据我了解,您通过以下方式获取所有数据:
ViewModelProviders.of(this).get(MyViewModel.class);
model.getData().observe(this, data -> {
// update UI
});
我想可以创建某种 listener/callback 但架构组件不应该让您免于此吗? 我错过了什么吗?
应用架构指南显示了 how to expose network status 的示例。我想您可以通过在加载时添加进度百分比来修改以下通用 class。
//a generic class that describes a data with a status
public class Resource<T> {
@NonNull public final Status status;
@Nullable public final T data;
@Nullable public final String message;
private Resource(@NonNull Status status, @Nullable T data, @Nullable String message) {
this.status = status;
this.data = data;
this.message = message;
}
public static <T> Resource<T> success(@NonNull T data) {
return new Resource<>(SUCCESS, data, null);
}
public static <T> Resource<T> error(String msg, @Nullable T data) {
return new Resource<>(ERROR, data, msg);
}
public static <T> Resource<T> loading(@Nullable T data) {
return new Resource<>(LOADING, data, null);
}
}
另外,您可以查看完整的实现 here。