【问题标题】:Problems with calling from strings.xml从 strings.xml 调用的问题
【发布时间】:2011-06-29 15:57:38
【问题描述】:

我在从 Android 中的 strings.xml 资源调用字符串值时遇到问题。 strings.xml 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="name1">contact_name1</string>
    <string name="phone1">contact_phone1</string>
</resources>

而调用字符串值的代码是:

private final String NAME1  = getString(R.string.name1);
private final String PHONE1 = getString(R.string.phone1);

我从我的main.java 那里调用我extend Activity 的字符串,所以我有上下文。问题是,当我运行应用程序(物理设备 (EVO) 或模拟器(API 级别 5 - 8)时,我在第一个 getString() 调用所在的行得到一个 NullPointerException。我已经浏览过 Google 的文档,这里和 AndDev.org 上的一些帖子,最终结果没有改变。在我拔掉所有头发之前,有人请告诉我出了什么问题!?strings.xml 文件位于标准位置 (@987654330 @directory) 与应用程序的其余部分在同一个包中。

【问题讨论】:

  • @Nic Strong 你的意思是来自 LogCat?还是设备中的原始文本文件?
  • 确保您没有无意中导入 android.R(或者,如果您这样做了,请使用您的包名完全限定 R)。
  • 查看sugarynugs的回答。在静态初始化器之外调用类体中的方法等同于将它们放在构造器中,因为 Java 编译器将简单地为这些行生成字段初始化代码,并将它们按照声明的顺序插入到构造器中。但是,由于此时上下文尚未完全初始化,您将看到错误行为。因此,在onCreate 中执行所有需要Context 的初始化。

标签: android string


【解决方案1】:

您不能从Activity 的构造函数中调用getString,因为上下文不存在。您将需要删除 final 关键字并在 onCreate() 中分配成员变量。

【讨论】:

  • 太棒了!这就像一个魅力,我有另一个问题,我似乎无法得到这样的明确答案。 @sugarynugs,你介意看看吗:stackoverflow.com/questions/4751609/…
  • @Kingsolmn。我看过并发表了评论。
【解决方案2】:

在 onCreate() 中使用下面一行

final String NAME1  = (getResources().getString(R.string.name1));

【讨论】:

  • getResources().getString() 等价于 getString()
  • 发现,当我打算使用全局类作用域时,我试图在 onCreate() 方法之外定义常量值,因此尚未定义上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 2015-12-31
  • 1970-01-01
  • 2017-09-14
  • 2014-07-19
相关资源
最近更新 更多