このプロジェクトでは大きな問題があります。 このプロジェクトでは、dbデータをSQLiteに読み込みたいと思っています。Android -getFileDir()によりNullPointer例外が発生する
しかし、エラーが発生しました。
src→main→assetsフォルダにdbデータ(last.db)を入れます。
Process: net.macdidi.lasttest, PID: 4829
java.lang.ExceptionInInitializerError
at net.macdidi.lasttest.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:6262)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1125)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2458)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2565)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1395)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5821)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference
at net.macdidi.lasttest.DatabaseHelper.<clinit>(SQLiteOpenHelper.java:18)
at net.macdidi.lasttest.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:6262)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1125)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2458)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2565)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1395)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5821)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
、これは私のコード
class DatabaseHelper extends SQLiteOpenHelper {
private static Context context;
private static String DB_PATH = context.getFilesDir().getAbsolutePath();
private static String DB_NAME = "last.db";
private final Context mCtx;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.mCtx = context;
}
public boolean createDatabase() {
boolean dbExist = checkDatabase();
this.getReadableDatabase();
if (dbExist == false) {
if (copyDatabase() == false) {
return false;
}
}
return true;
}
private boolean checkDatabase() {
SQLiteDatabase checkDB = null;
String dbpath = DB_PATH + DB_NAME;
try {
checkDB = SQLiteDatabase.openDatabase(dbpath,
null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
return false;
}
if (checkDB != null) {
checkDB.close();
return true;
}
return false;
}
private boolean copyDatabase() {
try {
InputStream input = mCtx.getAssets().open(DB_NAME);
this.getReadableDatabase();
String outFileName = DB_PATH + DB_NAME;
OutputStream output =
new FileOutputStream(outFileName);
byte [] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
return false;
}
return true;
}
public void onCreate(SQLiteDatabase db) {
}
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
}
}
である私は深く、誰かが私のために、この大きな問題を解決するために私を助けることができると思います。
ええコンテキストは、文字列DB_PATH = context.getFilesDir 'でヌルである()' –