Android架构组件 - 最佳实践

时间:2018-04-21 17:20:32

标签: android android-architecture-components

我尝试过Android架构组件,但我对最佳做法有一些疑问。

  1. 你如何处理错误?
  2. 例如,我可以有几种类型的错误。它可以是“No Internet”错误或其他(作为异常),可以是来自服务器的错误响应(作为字符串或json)。

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

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

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

    3. 由于

1 个答案:

答案 0 :(得分:1)

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

    }

  2. 应在服务层中解析服务器响应。因此,View从ViewModel订阅LiveData,ViewModel依次调用Service层。因此,“查看”可获得带有或不带错误符号的完全准备好的数据。

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