Android 架构组件 - 最佳实践
Android Architecture Components - Best practices
我已经尝试了 Android 架构组件,但我有几个关于最佳实践的问题。
- 你如何处理错误?
例如,我可能有几种类型的错误。它可以是 "No Internet" 错误或其他(作为异常),也可以是来自服务器的错误响应(作为字符串或 json)。
您是否为每种类型的错误创建了一些 LiveData?还是您创建一个包含结果和两种错误类型 (string/exception) 的包装器对象并仅使用一个 LiveData?什么更好?
具有 3 个字段的包装器对象似乎很复杂。
是否可以在View中解析结果和错误? View 是否需要太多工作,不是吗?你怎么想?另外,你在哪里解析 json-errors?
在 ViewModel 中使用 R.string 可以吗?或者它很糟糕?
如果是,我如何从 R.string 中获取 ViewModel 的字符串?
谢谢
我建议使用包装的通用对象,例如:
public class 结果库 {
私人字符串 _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 结果扩展了 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 层。因此,"View" 获得完全准备好的数据,有或没有错误符号。
没关系。 R.string 这只是一个常数。你可以像这样获得它
getApplicationContext().getString(strId)
我已经尝试了 Android 架构组件,但我有几个关于最佳实践的问题。
- 你如何处理错误?
例如,我可能有几种类型的错误。它可以是 "No Internet" 错误或其他(作为异常),也可以是来自服务器的错误响应(作为字符串或 json)。
您是否为每种类型的错误创建了一些 LiveData?还是您创建一个包含结果和两种错误类型 (string/exception) 的包装器对象并仅使用一个 LiveData?什么更好? 具有 3 个字段的包装器对象似乎很复杂。
是否可以在View中解析结果和错误? View 是否需要太多工作,不是吗?你怎么想?另外,你在哪里解析 json-errors?
在 ViewModel 中使用 R.string 可以吗?或者它很糟糕? 如果是,我如何从 R.string 中获取 ViewModel 的字符串?
谢谢
我建议使用包装的通用对象,例如:
public class 结果库 { 私人字符串 _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 结果扩展了 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 层。因此,"View" 获得完全准备好的数据,有或没有错误符号。
没关系。 R.string 这只是一个常数。你可以像这样获得它 getApplicationContext().getString(strId)