Strange NullPointerException

问题描述 投票:2回答:4

我有一个奇怪的问题...

我的文件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;
}
[...]

因此,当我尝试像这样在我的代码中调用此String时:

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的那一行}

我的代码怎么了?请帮忙

android nullpointerexception runtimeexception
4个回答
10
投票

您无法在活动初始​​化之前致电getString。这是因为getStringcontext.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);

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


2
投票

使用此功能可能会对您有所帮助

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

这对我有用


2
投票

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

  1. 尝试清理您的项目。
  2. 检查android.R类文件是否已导入,如果已导入,则将其删除并导入R类文件。
  3. 尝试使用getResources()。getString(R.string.myString)方法。

0
投票

如果在从一个活动到另一个活动中获取一些文本时出错例如:

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

getString然后给出空指针异常

该StudentID为字符串类型,因此只需将StudentID声明为

private String StudentID;

© www.soinside.com 2019 - 2024. All rights reserved.