我有奇怪的问题?
我的文件的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}
这有什么错我的代码?请帮忙
你不能打电话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);
你甚至可以做到这一点杉静态字段。
使用这个可以帮助你
getResources().getString(R.string.building_name);
这对我的作品
有些情况下,出现这种情况,你应该尝试以下提到的一些步骤是相同的:
- 尝试清理项目。
- 检查android.R类文件是否是进口与否,如果是进口然后将其删除,然后导入R类别的文件。
- 尝试使用getResources()。的getString(R.string.myString)方法。