2010-07-07 2 views
2

몇 가지 작업을 수행하기 위해 여러 가지 활동에 사용되는 DBHandler 클래스가 있습니다. DBHandler의 인스턴스화를 위해 MyApp 클래스 (Application 확장)를 만들었습니다.Android : extend android.app.Application

내 DBHandler 클래스 등 DB를 채우기 위해 SQLiteOpenHelper를 생성하기 위해 문맥을 필요로

문제가 시작 어디

: 내 MyApp를 생성자에서, 내 DBHandler를 인스턴스화 할, 그래서 쓴 :

public MyApp() { 
    super(); 
    dbh = DBHandler(<WHAT DO I PASS HERE>); 
} 

나는이 시점에서 getApplicationContext(), getBaseContext(), 'this'... 아무 것도 완전히 인스턴스화 된 컨텍스트 인 것 같습니다. SQLiteOpenHelper가 ctx.getResources()를 시도 할 때 NPE를 얻습니다.

해결 방법 : DBHandler를 만들고 주 클래스의 onCreate에 설정하십시오. -> UGLY (에스트리셔니스트라고 부름)

질문 : Android에서 MyApp를 만들 때 어떻게 할 수 있습니까?

감사합니다.

답변

1

MyApp.onCreate()에서 DBHandler를 만들면 원하는 작업을 수행 할 수 있습니다.

@Override 
public void onCreate() { 
    super.onCreate(); 
    dbh = new DBHandler(this); 
} 
+0

감사합니다. 한 가지 질문 : 리소스 (또는 컨텍스트)를 어떻게 참조합니까? MyApp.onCreate()에서 컨텍스트를 검사 할 때 NULL mBase var가됩니다. 내 MainActivity에 도착하면 그 객체는 더 이상 null이 아닙니다. 그래서 안드로이드는 onCreate를 호출 한 후 컨텍스트를 "완성하는"작업을 수행하고 있으므로 onCreate 중에는 "완전히 성장한 컨텍스트"가없는 것 같습니다. 의미가 있습니까? 내 가정이 사실인지 잘 모르겠지만 mBase가 null이므로 내 DBHandler를 사용하려고하면 확실히 실패합니다. 계란과 닭고기 문제가 있습니까? 감사합니다. – llappall

+0

MyApp * IS * 컨텍스트 MyApp.onCreate 내부에서 컨텍스트가 필요할 때마다 전달 ** this **. –

+0

또한 MyApp.onCreate()의 첫 번째 행이 super.onCreate()인지 확인하십시오. –

관련 문제