奇怪的NullPointerException(Strange NullPointerExcepti

2019-09-30 02:54发布

我有奇怪的问题?

我的文件的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

在{行其中I实例化的building_name}

这有什么错我的代码?请帮忙

Answer 1:

你不能打电话getString你的活动已被初始化之前。 这是因为getString是一样的context.getResources().getString() 和上下文未初始化。

所以基本上,你不能用这种方式将值分配给静态变量。

但在你的静态变量使用资源字符串的方法。 对于这种创建应用程序(见本和本 ),然后从那里获取上下文。 下面是一个简单的例子:

<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);

你甚至可以做到这一点杉静态字段。



Answer 2:

使用这个可以帮助你

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

这对我的作品



Answer 3:

有些情况下,出现这种情况,你应该尝试以下提到的一些步骤是相同的​​:

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


文章来源: Strange NullPointerException