2014-10-09 3 views
0

안녕하세요 변수를 초기화하는 동안 나는NullPointerException이 컨텐트 프로에

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) 

도움이 필요합니다

답변

1

rb_radio이 정적 방법으로 초기화 될 때 context은 개체가 인스턴스화 될 때 해당 값을 생성자에서 얻을 수 있기 때문에 가치가 없습니다. 당신의 static 초기화에

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); 
} 
0

코드는 정적 초기화 단계에서 실행하기에 너무 이르다 :

이보십시오. 예를 들어 인스턴스 변수 context은 아직 초기화되지 않았습니다.

static { ... } 블록의 코드를 전문가의 onCreate()으로 옮깁니다.

콘텐츠 공급자는 args를 사용하는 생성자가 없어야하지만 클래스가 실제로 ContentProvider 인 경우이 코드를 사용하면 컴파일 타임 오류가 발생합니다.

+0

고맙습니다. 응용 프로그램이 시작될 때 정적 블록에 R.string 값이 어떻게로드되어야합니까? – teekib

+0

수 없습니다. 컨텍스트와 리소스는 android app/activity/service/lifecycle의 onCreate() 이후에만 사용할 수 있습니다. – laalto