代码之家  ›  专栏  ›  技术社区  ›  James Cadd

ReStudio.*返回int中的值?

  •  61
  • James Cadd  · 技术社区  · 15 年前

    我认为我应该是一流的,并使用string.xml文件为异常消息之类的东西定义一些常量字符串。在strings.xml中,我点击add,选择“string”选项(不是“string array”),然后给它一个名称和值。我很惊讶地发现这个代码不起作用:

    throw new Exception(R.string.MyExceptionMessage);
    

    这失败了,因为r.string.myExceptionMessage实际上是int类型的。我可以通过在r.java中查找来验证该类型。我错过了什么?

    3 回复  |  直到 12 年前
        1
  •  113
  •   Christopher Orr    15 年前

    里面的一切 R 类是一个引用,因此它只是定义为 int .

    如果您的代码在Android中运行或可以访问Android Context 你可以打电话 context.getString(R.string.my_exception_message) 得到实际的 String 价值。

    或者,对于不需要翻译的异常字符串这样的事情,也不需要在android resource.xml文件中严格定义,您可以将这些字符串存储为某种类型的常量。 StringConstants 接口。这样,您就可以从可能无法访问 上下文 .

        2
  •  32
  •   skidadon    12 年前

    使用“getResources().getString(id)”方法。

      getResources().getString(R.string.title_activity)
    

    砰,你有你的绳子。请确保将该字符串存储在string.xml文件的values文件夹中。

        3
  •  5
  •   PinoSan    13 年前

    克里斯是对的。但如果您也希望本地化异常字符串,该怎么办呢?例如,您抛出一个异常,当您捕获它时,您希望向用户显示异常消息。我想把它们放在strings.xml中,但同时我不想使用此代码

    throw new Exception(context.getString(R.string.my_exception_message))
    

    因为我认为如果你有一个异常,你可能不想,你不能用一些额外的代码来获取异常消息。

    我认为唯一的解决方案是在主活动中声明此消息的静态字符串,并尽快对其进行初始化(例如在onCreate()方法中),如下所示:

    private static String my_exception_message;
    
    public onCreate()
    {
        my_exception_message = context.getString(R.string.my_exception_message);
    }
    

    因此,当抛出异常时,就可以使用本地化消息了。 你怎么想?你能想到其他的解决办法吗?