初始化contentprovider中的变量时出现NullpointerException

时间:2014-10-09 11:18:34

标签: android android-contentprovider

嗨,我想在很长一段时间内解决这个问题,但不能成功

我正在尝试初始化内容提供程序中的变量,如下所示

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)

感谢任何帮助

2 个答案:

答案 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,那么使用此代码就会出现编译时错误。