嗨,我想在很长一段时间内解决这个问题,但不能成功
我正在尝试初始化内容提供程序中的变量,如下所示
public static String rb_radio ;
public static String im_radio ;
static {
rb_radio = context.getResources().getString(R.string.kgs);
im_radio = context.getResources().getString(R.string.grams);
}
public AerProvider(Context ctx) {
super(ctx);
context = ctx;
我正在设置资源文件夹的rb_radio值,如您所见 但我得到空指针异常,下面是我的堆栈跟踪
10-09 16:38:40.265: E/AndroidRuntime(4114): Caused by: java.lang.NullPointerException
10-09 16:38:40.265: E/AndroidRuntime(4114):at com.in.android.aer.contentprovider.AerProvider.<clinit>(AerProvider.java:49)
感谢任何帮助
答案 0 :(得分:1)
当rb_radio
以静态方式初始化时,context
没有值,因为当实例化对象时,它将在构造函数中获取其值。
试试这个:
public static String rb_radio = null;
public static String im_radio = null;
public AerProvider(Context ctx) {
super(ctx);
context = ctx;
if (rb_radio == null) rb_radio = context.getResources().getString(R.string.kgs);
if (im_radio == null) im_radio = context.getResources().getString(R.string.grams);
}
答案 1 :(得分:0)
static
初始化程序中的代码太早,无法在静态初始化阶段运行。例如,实例变量context
尚未初始化。
将static { ... }
块中的代码移至投标人的onCreate()
。
另请注意,内容提供程序不应该有一个带args的构造函数,但是如果该类真的是ContentProvider
,那么使用此代码就会出现编译时错误。