【问题标题】:String resource returns a number?字符串资源返回一个数字?
【发布时间】:2016-03-09 08:14:09
【问题描述】:

在我的 android 项目中,我在 res/ 文件夹中有一个字符串资源 (string.xml)。

在那个 string.xml 中我创建了几个字符串,例如:

<string name="my_server">http://12.34.56.78</string>
<string name="my_port">1234</string>

然后我在代码中使用:

String url = R.strings.my_server + ":" + R.strings.my_port;
System.out.println("My server and port is: " + url);

但我的输出是:

我的服务器和端口是:2131099700:2131099702

我的字符串在哪里?这似乎是那个字符串的地址?

【问题讨论】:

标签: java android string android-resources


【解决方案1】:

改变:

<string name="my_server">http://12.34.56.78</string>
...

String url = R.strings.my_server + ":" + R.strings.my_port;

<string name="my_server">http:\/\/12.34.56.78</string>
...

String url = getString(R.strings.my_server) + ":" + getString(R.strings.my_port);

您需要转义my_server 字符串,并使用getString(int) 方法检索strings

【讨论】:

  • 不,当我只有没有端口的服务器时: String url = R.strings.my_server; // Android Studio 报错:需要 String,找到 int。提供使用 String.valueOf()
  • log4j:WARN 找不到记录器 (com.example.json.JacksonRequest) 的附加程序。 log4j:WARN 请正确初始化 log4j 系统。 log4j:WARN 请参阅logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息。
  • 我发现这个错误与您使用的 Jackson 解析器有关,而不是这个。
【解决方案2】:

您可以像这样获取字符串资源的字符串值,例如:

String yourString = context.getResources().getString(R.string.my_port);

context 是您活动的上下文

如果你导入import android.content.res.Resources,或者像这样:

String yourString = Resources.getSystem().getString(R.string.my_port);

【讨论】:

  • 我得到一个 android.content.res.Resources$NotFoundException: unknown resource 2131099700
【解决方案3】:

看起来您实际上是在引用 R 文件中的 Id 而不是与其相关的值。

你需要这样做才能得到字符串:

getResources().getString(R.string.my_server)

根据Android Documentation,您不需要转义'/'。

【讨论】:

    【解决方案4】:

    R.string 将以Integer 的形式返回该特定字符串的id

    要获取实际字符串,您将使用getResources().getString(R.string.your_string);

    所以,你的url 字符串会是这样的

    String url = getResources().getString(R.strings.my_server) + ":" + getResources().getString(R.strings.my_port);
    

    【讨论】:

      【解决方案5】:

      只是想补充一下,你需要使用contextgetString方法:

      context.getString(R.id.your_string_name)
      

      例如在我的适配器类中,我将上下文定义为

      private Context mContext;
      

      然后我在警报对话框的消息部分中使用它作为

      ...
      
      .setMesasge(mContext.getString(R.string.my_string_name))
      
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-30
        • 2017-10-09
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 2019-12-06
        相关资源
        最近更新 更多