-2
私はこの質問が1000回尋ねられたことを知っています。私はそれらの多くと答えを読んでいます。しかし、私はこのケースで私の問題を解決できませんでした。 私はこの例外を取得し、私のアンドロイドアプリでgetWritableDatabase()関数を呼び出しています:getWritableDatabaseのAndroid NullPointException
E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.schneider_schwarz_inc.tagesablauf_log, PID: 12634
java.lang.RuntimeException: Unable to start activity ComponentInfo{de.schneider_schwarz_inc.tagesablauf_log/de.schneider_schwarz_inc.tagesablauf_log.GUI.ToDo.ToDoList}: java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at de.schneider_schwarz_inc.tagesablauf_log.Database.ToDo.ToDoDao.insertToDo(ToDoDao.java:41)
at de.schneider_schwarz_inc.tagesablauf_log.Todo.createTodo(Todo.java:25)
at de.schneider_schwarz_inc.tagesablauf_log.GUI.ToDo.ToDoList.onCreate(ToDoList.java:47)
at android.app.Activity.performCreate(Activity.java:6664)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at de.schneider_schwarz_inc.tagesablauf_log.Database.ToDo.ToDoDao.insertToDo(ToDoDao.java:32)
at de.schneider_schwarz_inc.tagesablauf_log.Todo.createTodo(Todo.java:25)
at de.schneider_schwarz_inc.tagesablauf_log.GUI.ToDo.ToDoList.onCreate(ToDoList.java:47)
at android.app.Activity.performCreate(Activity.java:6664)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
マイSqliteopenhelperクラス:
public ToDoDbHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
System.out.println("creating database");
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public static int getDatabaseVersion() {
return DATABASE_VERSION;
}
私は、このクラスでそれを使用します。
public class ToDoDao {
private Context context;
private ToDoDbHelper toDoDbHelper;
public ToDoDao(Context context){
this.context = context;
toDoDbHelper = new ToDoDbHelper(context);
}
/**
* Inserts ToDos into Database
* @param data data to insert
* @return is -1 when error, else the id
*/
public long insertToDo(ToDoData data){
try{
SQLiteDatabase db = toDoDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ToDoStructure.ToDoEntry.COLUMN_NAME_TITLE, data.getTitle());
values.put(ToDoStructure.ToDoEntry.COLUMN_NAME_DATE, data.getDate());
return db.insert(ToDoStructure.ToDoEntry.TABLE_NAME, null, values);
}catch (Exception e){
System.out.println("ERROR!");
//TODO handling exception
throw new RuntimeException(e);
}
}
私はここで使用します:
public class Todo {
private List<ToDoData> dataList;
private Context context;
private ToDoDao dao = new ToDoDao(context);
public Todo(Context context){
this.context = context;
//dataList = dao.getAllToDos();
dataList = new ArrayList<>();
}
public int createTodo(String title, String date){
ToDoData newData = new ToDoData(title, date);
long id = dao.insertToDo(newData);
if(id == -1){
return (int) id;
}
newData.setId(String.valueOf(id));
dataList.add(newData);
return 0;
}
私は私のコンテキストを取得
と、少なくとも私の活動:
public class ToDoList extends Activity {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState){
System.out.println("createListView");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
Todo todo = new Todo(this);
todo.createTodo("Test1", "20160910");
List<ToDoData> todoList = todo.getDataList();
System.out.println(todoList.get(0).getTitle());
mAdapter = new ToDoViewAdapter(getBaseContext(), todoList);
mRecyclerView.setAdapter(mAdapter);
}
は、私はこの問題は私のコンテキストだと思います。しかし、私はそれを修正するために知りません...
ありがとう!