Android 架构组件 - 最佳实践

Android Architecture Components - Best practices

我已经尝试了 Android 架构组件,但我有几个关于最佳实践的问题。

  1. 你如何处理错误?

例如,我可能有几种类型的错误。它可以是 "No Internet" 错误或其他(作为异常),也可以是来自服务器的错误响应(作为字符串或 json)。

您是否为每种类型的错误创建了一些 LiveData?还是您创建一个包含结果和两种错误类型 (string/exception) 的包装器对象并仅使用一个 LiveData?什么更好? 具有 3 个字段的包装器对象似乎很复杂。

  1. 是否可以在View中解析结果和错误? View 是否需要太多工作,不是吗?你怎么想?另外,你在哪里解析 json-errors?

  2. 在 ViewModel 中使用 R.string 可以吗?或者它很糟糕? 如果是,我如何从 R.string 中获取 ViewModel 的字符串?

谢谢

  1. 我建议使用包装的通用对象,例如:

    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();
    }
    

    }

  2. 服务器响应应该在服务层进行解析。因此,View 从 ViewModel 订阅 LiveData,ViewModel 又调用 Service 层。因此,"View" 获得完全准备好的数据,有或没有错误符号。

  3. 没关系。 R.string 这只是一个常数。你可以像这样获得它 getApplicationContext().getString(strId)