我有一个奇怪的问题...
我的文件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的那一行}
我的代码怎么了?请帮忙
您无法在活动初始化之前致电getString
。这是因为getString
与context.getResources().getString()
相同。并且上下文未初始化。
因此,基本上,您不能以这种方式将值分配给静态变量。
但是有一种在静态变量中使用资源字符串的方法。为此,创建您的应用程序(请参见this和this),然后从那里检索上下文。这是一个简短的示例:
<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);
您甚至可以执行此静态字段。
使用此功能可能会对您有所帮助
getResources().getString(R.string.building_name);
这对我有用
在某些情况下会发生这种情况,对于同样的情况,您应尝试以下提到的一些步骤:
如果在从一个活动到另一个活动中获取一些文本时出错例如:
StudentID = getIntent().getExtras().getString("Value");
getString然后给出空指针异常
该StudentID为字符串类型,因此只需将StudentID声明为
private String StudentID;