android - 我在这段代码中正确使用 LiveData 吗?(作品)
问题描述
我是 Android 开发的新手,我正在尝试使用一种好的模式来使用 ViewModel、Retrofit、LiveData 从 Web 服务访问我的数据。寻找有关此模式的反馈。
我经历了一些迭代和在线指南,并想出了这个
从活动:
LiveData<TicklerResponse> ticklerLiveData =
ticklerViewModel.search(ticklerSearchObject);
ticklerLiveData.observe(this, new Observer<TicklerResponse>() {
@Override
public void onChanged(@Nullable TicklerResponse ticklerResponse) {
Log.d(TAG, "onChanged: ticklerResponse size = " + ticklerResponse.getContent().size());
}
});
视图模型
public LiveData<TicklerResponse> search(TicklerSearchObject ticklerSearchObject) {
TicklerRepository ticklerRepository = TicklerRepository.getInstance();
String header = OscarOAuthContainer.getInstance()
.generateAuthorizationHeader(Verb.POST,"/tickler/search?startIndex=0&limit=1000");
MutableLiveData<TicklerResponse> liveData = new MutableLiveData<TicklerResponse>();
ticklerRepository.search(header,liveData, ticklerSearchObject);
return liveData;
}
存储库
public void search(final String authHeader, final MutableLiveData<TicklerResponse> ticklerLiveData, TicklerSearchObject ticklerSearchObj) {
Log.d(TAG, "search: called");
Call<TicklerResponse> call = api.search(authHeader,0,1000,ticklerSearchObj);
call.enqueue(new Callback<TicklerResponse>() {
@Override
public void onResponse(Call<TicklerResponse> call, Response<TicklerResponse> response) {
if(response.isSuccessful()){
Log.d(TAG, "onResponse: successful response for getProvider");
TicklerResponse result = response.body();
ticklerLiveData.setValue(result);
} else {
Log.d(TAG, "onResponse: NOT SUCCESSFUL");
}
}
@Override
public void onFailure(Call<TicklerResponse> call, Throwable t) {
t.printStackTrace();
}
});
}
它似乎有效,但我担心我是否正确使用 LiveData 结构来实例化/传递它。
解决方案
推荐阅读
- python - 如何让Python和HTML同时识别大写和小写字母?
- swift - 如何保存字典
到用户默认值? - python - MongoDB Motor - 无法使用变量 $push 到嵌套数组中
- performance-testing - 是否有任何开源工具可以提供网站性能,包括客户端渲染时间
- javascript - 如何在没有 document.getElementById('..') 的情况下获取输入(文本)字段的值
- java - GPay InAppSubscription SetSku详情
- google-apps-script - 使用 Apps 脚本访问 tumblr API 时遇到问题
- html - 如何将文本放置在居中(水平和垂直)内部的图像下方
- azure - 在 Azure 数据工厂概览页面中看不到作者和监控卡
- node.js - mongodb / mongoose 子文档聚合查询