android - 在异常中使用资源

标签 android

我有一个使用自定义异常的应用程序,例如:

public class SomeException extends Exception{
    private int         iCode;
    private String      iMessage;

    public SomeException(){
        iCode = 201;
        iMessage = **//Get the localized string R.string.error_201??**
    }


    @Override
    public String getMessage() {
        return iMessage;
    }


    @Override
    public int getCode() {
        return iCode;
    }

}

显然,我想本地化错误消息。我有可能的解决方案,但没有一个让我满意。

1) 将 "Context"传递给构造函数,并执行 ctx.getString(R.string.error_201) --> 失败,因为这个异常有时会从 MODEL 类中抛出,所以它们没有上下文

2) 在getMessage() 函数中获取消息时传递"Context", --> 失败,必须覆盖 super 方法,才能像所有其他异常一样工作。

我现在的解决方案:我应用中的所有 Activity 都有这个 onCreate:

public void onCreate(...){
    Utils.RESOURCES = getResources();
    ...
}

非常脏的代码...我不喜欢这个解决方案。那么我的问题是:有没有办法在没有上下文的情况下访问资源?最重要的是,像我这样的应用程序将如何解决这个问题?

最佳答案

怎么样

public class MyException extends Exception {
  private int iCode;

  public MyException(int code) {
    this.iCode = code;
  }

  @Override
  public String getMessage() {
    return "MyException code " + String.valueOf(iCode);
  }

  public String getLocalizedMessage(Context ctx) {
    String message;
    if (iCode == 201)
      message = ctx.getString(R.string.error_201);
    else if (iCode == 202)
      message = ctx.getString(R.string.error_202);
    // ...

  }
}

即使有办法以不同的方式访问上下文,您也不应该这样做。如果您需要在无法传递上下文的地方发出异常,您应该能够在显示此类错误之前访问上下文。我看不出您应该从构造函数创建本地化错误消息的原因。如果需要,您可以登录到非本地化版本的 logcat。在您想要在 UI 中显示某些内容的位置,您应该手头有上下文。

关于android - 在异常中使用资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691579/

相关文章:

java - 当我在 getView() 中将某些项目设置为 view.invisible 时,其他项目不会出现

android - 用多个按钮或 View 填充 RelativeLayout

android - 使用 ViewModel (Android Studio, Kotlin) 将数据从 fragment A 发送到 fragment B

android - 如何为 TextView 中的文本更改设置动画?

android - Heyzap 横幅广告在 'Failed to load ad: 3' 后消失

java - 以纳秒为单位的字符串-日期转换

android - 发布/创建从 Android 应用程序到 Facebook 的民意调查

android - 如何在 Android 中以 XML 格式发送 SOAP 请求和解析 SOAP 响应?

java - 如果网站本身不支持推送通知,如何实现推送通知?

android - 如何在 Android webview 中打开 mp4 视频?