【问题标题】:Why does this method compile?为什么这个方法编译?
【发布时间】:2014-05-19 09:43:52
【问题描述】:

为什么这个方法会编译?

    private int test(){
      return R.string.test;
    }

R.string.test 在我的 android strings.xml 文件中是这样定义的:

<resources>

     <string name="test">Test</string>  

</resources>

我所知道的关于逻辑、宇宙和生命本身的一切目前都毫无意义。请帮助一个困惑的灵魂。

【问题讨论】:

  • 很难猜,你没有导入 R。或者你有错误的导入
  • 清理你的项目,那么下次它肯定不会编译。这可能在您第一次创建测试字符串并在 R.java 中生成测试 id 时成为可能。当您清理项目时,它会再次生成新的 id。

标签: java android syntax


【解决方案1】:

当您定义资源时,android 代码生成器会读取 resources 文件并生成包含所有 resources id 的 java 文件 R.java,这就是代码编译正确的原因。

【讨论】:

    【解决方案2】:

    R.string.teste 获取字符串的 id 为整数。所以我没有看到任何问题......

    要获取字符串,你应该写context.getResources().getString(R.string.teste)

    【讨论】:

    • 你的绝对是评论
    • 当然,现在是清晨,我还没有喝咖啡。不敢相信我花了多长时间才想到那个。
    • @user253296 按住 windows 键然后点击test
    【解决方案3】:

    在 Android 中,位于res 文件夹中的所有资源都编译在一个名为 R.java 的类中,在那里,您拥有所创建资源的标识符。例如,在R.java 类内部有一个子类string 用于字符串,id 用于ID 等等。在您的示例中,您将拥有:

    public final class R {
    
        // Other stuff   
    
        public static final class string {
            public static final int test=0x7f05001c;
            // More String resources
        }
    
        // Other stuff
    
    }
    

    因此,当您执行 return R.string.test; 时,您将返回该资源的 ID,在我的示例中为 0x7f05001c

    如果您想要的是检索字符串本身,而不是其 id,您需要按照@Suvtruf 告诉您的操作:context.getResources().getString(R.string.test)

    【讨论】:

      【解决方案4】:

      试试这个:

      private String test(){
          String mess = getResources().getString(R.string.test);
          return mess;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 2012-02-27
        相关资源
        最近更新 更多