android - 使用 GithubBrowserSample 在 viewmodel 中进行存储库方法调用而不使用 transformation.switchmap
问题描述
Google 的GithubBrowserSample基于是否进行了搜索,以便调用结果。在我的场景中,没有任何搜索,我只想在片段加载时调用它。但是,我不知道该怎么做。利用断点和反复试验,我似乎无法将其标记为进入我选择的存储库方法。任何提示将不胜感激。
我的一些代码片段:
public class CategoryViewModel extends ViewModel {
private final LiveData<Resource<List<Category>>> categories;
@Inject
CategoryViewModel(@NonNull CategoryRepository categoryRepository){
categories = categoryRepository.getDBCategories();
}
样本中的等价物:
public class SearchViewModel extends ViewModel {
private final MutableLiveData<String> query = new MutableLiveData<>();
private final LiveData<Resource<List<Repo>>> results;
private final NextPageHandler nextPageHandler;
@Inject
SearchViewModel(RepoRepository repoRepository) {
nextPageHandler = new NextPageHandler(repoRepository);
results = Transformations.switchMap(query, search -> {
if (search == null || search.trim().length() == 0) {
return AbsentLiveData.create();
} else {
return repoRepository.search(search);
}
});
}
解决方案
对于同一条船上的其他人,通过简单地修改 SearchViewModel 构造函数以对查询进行硬编码,我很快就发现即使在示例应用程序上也可以立即加载,因为在搜索片段上观察到数据。
于是我上交了 SearchViewModel:
@Inject
SearchViewModel(RepoRepository repoRepository) {
nextPageHandler = new NextPageHandler(repoRepository);
results = Transformations.switchMap(query, search -> {
if (search == null || search.trim().length() == 0) {
return AbsentLiveData.create();
} else {
return repoRepository.search(search);
}
});
}
至
@Inject
SearchViewModel(RepoRepository repoRepository) {
results = repoRepository.search("shadow");
nextPageHandler = new NextPageHandler(repoRepository);
}
希望这对其他人有帮助。
推荐阅读
- python - 在子图的同一 y 轴上绘制不同比例的数据
- c - sizeof 如何处理指向数组的指针的取消引用?
- python - Scipy optimize curve_fit 在拟合自定义函数时为相同参数提供不同的图
- java - Flutter:如何将原生 SDK(Spotify Android SDK)添加到应用程序?
- c# - 有没有办法在不维护 C# 中的大写/小写的情况下获取字符串是否有子字符串?
- python - 在 DST 更改发生时将字符串解析为日期
- java - 错误:执行 jar 文件时无法找到或加载主类
- c++ - 在 5d 地图 C++ 中查找项目
- grpc - 如何在 grpc-web 中使用 grpc 流式传输?
- ruby-on-rails - 生成的 RSpec 控制器测试因参数数量错误而失败(给定 2,预期为 1)