我有这个班级
public class InternetConnectionException extends RuntimeException {
int code = 0;
public InternetConnectionException(){
super("Internet connection is down");
}
public InternetConnectionException(String message){
super(message);
}
}
此错误消息不应该是硬编码的。它应该被外部化以便提供不同的语言,因为当抛出此异常时,消息将显示在屏幕上。
现在,有没有办法将其外部化为strings.xml
资源,还是应该更改设计? (即抛出此异常时,只需引用活动中的字符串资源并显示已解析的值)
我认为好的设计不应该允许纯Java类(例如异常)知道Android框架的内部,但我可能错了。
答案 0 :(得分:1)
由于您无法直接访问string.xml,但我可以通过一种方式来实现您尝试完成的任务。
以下是一些展示这个想法的代码
AppApplication.java
public class AppApplication extends Application {
public static StringConstant STRING_CONSTANT;
@Override
public void onCreate() {
super.onCreate();
STRING_CONSTANT = new StringConstant(getBaseContext());
STRING_CONSTANT.build();
}
}
StringConstant.java
public class StringConstant {
private Context context;
public static String appName;
// declare other String variables
public StringConstant(Context context) {
this.context = context;
}
public void build(){
setAppName(context.getString(R.string.app_name));
// set other String variables
}
public static String getAppName() {
return appName;
}
public static void setAppName(String appName) {
StringConstant.appName = appName;
}
}
现在从另一个类访问字符串
public class InternetConnectionException extends RuntimeException {
int code = 0;
public InternetConnectionException(){
super(AppAplication.STRING_CONSTANT.getAppName());
}
public InternetConnectionException(String message){
super(message);
}
}