我尝试过Android架构组件,但我对最佳做法有一些疑问。
例如,我可以有几种类型的错误。它可以是“No Internet”错误或其他(作为异常),可以是来自服务器的错误响应(作为字符串或json)。
您是否为每种类型的错误创建了一些LiveData?或者您是否使用结果和两种类型的错误(字符串/异常)创建包装器对象并仅使用一个LiveData?什么更好? 具有3个字段的包装器对象似乎很复杂。
在View中解析结果和错误是否可以? View是否做了太多工作,不是吗?你怎么想?另外,你在哪里解析json-errors?
在ViewModel中使用R.string是否可以?还是很糟糕? 如果是,我如何从ViewSodel的R.string中获取字符串?
由于
答案 0 :(得分:1)
我建议使用包装的通用对象,例如:
公共类ResultBase { private String _error;
public ResultBase(){}
public ResultBase(String error){
_error = error;
}
public boolean isSuccess(){
return _error == null || _error.isEmpty();
}
public String getError(){
return _error;
}
public void setError(String error){
_error = error;
}
}
public class Result extends ResultBase {
private T mData;
public T getData(){
return mData;
}
public Result(String message){
super(message);
}
public Result(T data){
mData = data;
}
@Override
public String toString() {
return isSuccess() ? "Ok" : "ERROR: " + getError();
}
}
应在服务层中解析服务器响应。因此,View从ViewModel订阅LiveData,ViewModel依次调用Service层。因此,“查看”可获得带有或不带错误符号的完全准备好的数据。
没关系。 R.string它只是一个常数。你可以像它一样获得它 getApplicationContext()。的getString(strId)