03-21 17:36:59.712: E/AndroidRuntime(29394): FATAL EXCEPTION: main
03-21 17:36:59.712: E/AndroidRuntime(29394): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.toeic/com.example.toeic.Stage_m_lessonActivity}: java.lang.NullPointerException
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1892)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.ActivityThread.access$600(ActivityThread.java:127)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.os.Handler.dispatchMessage(Handler.java:99)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.os.Looper.loop(Looper.java:137)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.ActivityThread.main(ActivityThread.java:4512)
03-21 17:36:59.712: E/AndroidRuntime(29394): at java.lang.reflect.Method.invokeNative(Native Method)
03-21 17:36:59.712: E/AndroidRuntime(29394): at java.lang.reflect.Method.invoke(Method.java:511)
03-21 17:36:59.712: E/AndroidRuntime(29394): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
03-21 17:36:59.712: E/AndroidRuntime(29394): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
03-21 17:36:59.712: E/AndroidRuntime(29394): at dalvik.system.NativeStart.main(Native Method)
03-21 17:36:59.712: E/AndroidRuntime(29394): Caused by: java.lang.NullPointerException
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
03-21 17:36:59.712: E/AndroidRuntime(29394): at com.example.toeic.toeicDBManager.copyDB(toeicDBManager.java:133)
03-21 17:36:59.712: E/AndroidRuntime(29394): at com.example.toeic.toeicDBManager.<init>(toeicDBManager.java:32)
03-21 17:36:59.712: E/AndroidRuntime(29394): at com.example.toeic.Stage_m_lessonActivity.<init>(Stage_m_lessonActivity.java:64)
03-21 17:36:59.712: E/AndroidRuntime(29394): at java.lang.Class.newInstanceImpl(Native Method)
03-21 17:36:59.712: E/AndroidRuntime(29394): at java.lang.Class.newInstance(Class.java:1319)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.Instrumentation.newActivity(Instrumentation.java:1026)
03-21 17:36:59.712: E/AndroidRuntime(29394): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1883)
03-21 17:36:59.712: E/AndroidRuntime(29394): ... 11 more
여기서 이상한 점이. 액티비티가 2개(공부모드, 반복모드)가 있다면요
반복모드를 들어갈 경우에는 저런 에러가 나는데,
공부모드로 가면 db가 정상적으로 열리고 다시 반복모드를 가면
정상적으로 열립니다;;
제 db에 문제가 있는건지 확인을 해봤는데 문제가 전혀 없어 보이는데 이런 현상이 발생하네요...
public class toeicDBManager {
Context mContext;
String mPath = "/data/data/com.example.toeic06/db";
String mFileName = "toeic";
SQLiteDatabase mDb;
//반복모드의 틀린 문제 정보를 같는 테이블 생성
String mCreateTableWrongInfo = "CREATE TABLE IF NOT EXISTS tbl_limit_wronginfo ( try_count INTEGER, wrong_count INTEGER, wrong_q_info TEXT)";
public PocketDBManager(Context context) {
mContext = context;
File db = new File(mPath + File.separator + mFileName);
if (!db.exists()) {
copyDB();
}
}
public void open() {
File db = new File(mPath + File.separator + mFileName);
if (!db.exists()) {
copyDB();
}
mDb = SQLiteDatabase.openDatabase(mPath + File.separator + mFileName,
null, SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}
public void close() {
mDb.close();
mDb = null;
}
protected boolean copyDB() {
try {
File dir = new File(mPath);
if (!dir.exists())
dir.mkdirs();
File outfile = new File(mPath + File.separator + mFileName);
AssetManager assMgr = mContext.getResources().getAssets();
InputStream in = assMgr.open("database/toeic.db", AssetManager.ACCESS_BUFFER);
long filesize = in.available();
byte[] tempData = new byte[(int)filesize];
in.read(tempData);
in.close();
outfile.createNewFile();
FileOutputStream outFile = new FileOutputStream(outfile);
outFile.write(tempData);
outFile.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean initDB() {
File db = new File(mPath + File.separator + mFileName);
if (!db.delete())
return false;
if (!copyDB())
return false;
return true;
}