2

我有奇怪的问题...

我的文件 strings.xml 包含:

<?xml version="1.0" encoding="utf-8?>
<resources>
    <string name="building_name">My House</string>
</resources>

好吧,我的 R 包含:

[...]
public static final class String {
    public static final int building_name=0x7f02383;
}
[...]

因此,当我尝试在我的代码中调用此字符串时,如下所示:

private final String BUILDING_NAME = getString(R.string.building_name);

我有这个错误:

java.lang.RuntimeException: Unable to instanciate activity ComponentInfo{...}:          java.lang.NullPointerException
{...}
  caused by: java.lang.NullPointerException

在{我实例化 building_name 的行}

我的代码有什么问题?请帮忙

4

4 回答 4

10

getString在您的 Activity 初始化之前,您不能调用。那是因为getString与 相同context.getResources().getString()。并且上下文未初始化。

所以基本上,你不能以这种方式为静态变量赋值。

但是有一种方法可以在静态变量中使用资源字符串。为此创建您的应用程序(参见thisthis),然后从那里检索上下文。这是一个简短的例子:

<manifest ...>
    ...
    <application  android:name="com.mypackage.MyApplication" ... >
       ...
    </application>
    ...
</manifest>

然后创建MyApplication.java文件:

public class MyApplication extends Application 
{   
    private static MyApplication s_instance;

    public MyApplication ()
    {
        s_instance = this;
    }

    public static Context getContext()
    {
        return s_instance;
    }

    public static String getString(int resId)
    {
        return getContext().getString(resId);       
    }
}

然后用它来获取字符串资源:

private final String BUILDING_NAME = MyApplication.getString(R.string.building_name);

您甚至可以对静态字段执行此操作。

于 2011-06-07T07:42:54.800 回答
2

使用它可能会帮助你

getResources().getString(R.string.building_name);

这对我有用

于 2011-06-07T07:43:18.560 回答
2

在某些情况下会发生这种情况,同样您应该尝试以下提到的一些步骤:

  1. 尝试清理您的项目。
  2. 检查android.R类文件是否已导入,如果已导入则将其删除并导入您的R类文件。
  3. 尝试使用 getResources().getString(R.string.myString) 方法。
于 2011-06-07T07:43:40.073 回答
0

如果您在从一项活动到另一项活动中获取某些文本时出错,例如

StudentID = getIntent().getExtras().getString("Value");

getString 然后给出空指针异常

StudentID 是 String 类型,所以只需将 StudentID 声明为

private String StudentID;

于 2020-02-09T08:44:28.480 回答