簡體   English   中英

如何在Android中的自定義異常類中外部化錯誤消息的字符串

[英]How to externalize the string for an error message in a custom exception class in Android

我有這堂課

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框架的內部,但我可能是錯的。

由於您不能直接訪問string.xml,但是我可以想到一種方法來實現您要完成的任務。

  • 將所有String值放入string.xml
  • 維護另一個Java類(例如,StringConstant.java),該類將保存您需要在其他非活動/片段類中訪問的string.xml的某些內容。
  • 擴展Application類(例如AppApplication.java)並在此處初始化StringConstant類的對象
  • 從StringConstant類加載字符串
  • 通過Application類中的StringConstant實例從其他類訪問String。

這是一些代碼來證明這個想法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM