Gre*_*reg 2 android nullpointerexception runtimeexception
我有奇怪的问题......
我的文件strings.xml包含:
<?xml version="1.0" encoding="utf-8?>
<resources>
<string name="building_name">My House</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
好吧,我的R包含:
[...]
public static final class String {
public static final int building_name=0x7f02383;
}
[...]
Run Code Online (Sandbox Code Playgroud)
所以,当我尝试在我的代码中调用此String时,如下所示:
private final String BUILDING_NAME = getString(R.string.building_name);
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
java.lang.RuntimeException: Unable to instanciate activity ComponentInfo{...}: java.lang.NullPointerException
{...}
caused by: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
在{我实现building_name}的行
我的代码出了什么问题?请帮忙
ina*_*ruk 10
您getString的活动初始化之前无法致电.那是因为getString是一样的context.getResources().getString().并且上下文未初始化.
所以基本上,你不能以这种方式为静态变量赋值.
但是有一种方法可以在静态变量中使用资源字符串.为此创建您的应用程序(请参阅此和此),然后从那里检索上下文.这是一个简短的例子:
<manifest ...>
...
<application android:name="com.mypackage.MyApplication" ... >
...
</application>
...
</manifest>
Run Code Online (Sandbox Code Playgroud)
然后创建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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后用它来获取字符串资源:
private final String BUILDING_NAME = MyApplication.getString(R.string.building_name);
Run Code Online (Sandbox Code Playgroud)
你甚至可以做这个冷静态领域.
| 归档时间: |
|
| 查看次数: |
3003 次 |
| 最近记录: |