Исключение Null Pointer Android SQLite

Я получаю это в LogCat:

05-20 17:16:34.721: E/AndroidRuntime(30461): FATAL EXCEPTION: main 05-20 17:16:34.721: E/AndroidRuntime(30461): java.lang.NullPointerException 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:290) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:96) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1810) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1761) 05-20 17:16:34.721: E/AndroidRuntime(30461): at com.kickinglettuce.debtplannerpro.DebtDataSource.updateDebt(DebtDataSource.java:130) 05-20 17:16:34.721: E/AndroidRuntime(30461): at com.kickinglettuce.debtplannerpro.manageDebts$4.onClick(manageDebts.java:184) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.view.View.performClick(View.java:3511) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.view.View$PerformClick.run(View.java:14105) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.os.Handler.handleCallback(Handler.java:605) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.os.Handler.dispatchMessage(Handler.java:92) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.os.Looper.loop(Looper.java:137) 05-20 17:16:34.721: E/AndroidRuntime(30461): at android.app.ActivityThread.main(ActivityThread.java:4447) 05-20 17:16:34.721: E/AndroidRuntime(30461): at java.lang.reflect.Method.invokeNative(Native Method) 05-20 17:16:34.721: E/AndroidRuntime(30461): at java.lang.reflect.Method.invoke(Method.java:511) 05-20 17:16:34.721: E/AndroidRuntime(30461): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-20 17:16:34.721: E/AndroidRuntime(30461): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-20 17:16:34.721: E/AndroidRuntime(30461): at dalvik.system.NativeStart.main(Native Method) 

Вот код, связанный с ним:

 protected void onListItemClick(ListView l, View v, int position, long id) { List<Debt> values = datasource.getAllDebt(); datasource.open(); Debt item = values.get(position); final long boxId = item.getId(); // final String BoxId = String.valueOf(boxId); final String BoxName = item.getName(); final String BoxBalance = item.getBalance(); final String BoxApr = item.getApr(); final String BoxPayment = item.getPayment(); // set up dialog final Dialog dialog = new Dialog(manageDebts.this); dialog.setContentView(R.layout.custom_dialog); dialog.setTitle("Edit Debt Details"); dialog.setCancelable(true); // set up text TextView tv1 = (TextView) dialog.findViewById(R.id.textView1); TextView tv2 = (TextView) dialog.findViewById(R.id.textView2); TextView tv3 = (TextView) dialog.findViewById(R.id.textView3); TextView tv4 = (TextView) dialog.findViewById(R.id.textView4); EditText et1 = (EditText) dialog.findViewById(R.id.editText1); EditText et2 = (EditText) dialog.findViewById(R.id.editText2); EditText et3 = (EditText) dialog.findViewById(R.id.editText3); EditText et4 = (EditText) dialog.findViewById(R.id.editText4); tv1.setText("Debt Description"); tv2.setText("Balance"); tv3.setText("APR"); tv4.setText("Monthly Payment"); et1.setText(BoxName); et2.setText(BoxBalance); et3.setText(BoxApr); et4.setText(BoxPayment); // set up button Button button = (Button) dialog.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { datasource.updateDebt(Long.valueOf(boxId), BoxName, BoxBalance, BoxApr, BoxPayment); dialog.dismiss(); } }); datasource.close(); dialog.show(); } 

И метод Update в моем классе базы данных:

 public boolean updateDebt(long updateId, String debtName, String debtTotal, String debtApr, String paymentGoal) { ContentValues values = new ContentValues(); values.put(MySQLiteHelper.COLUMN_DEBT_NAME, debtName); values.put(MySQLiteHelper.COLUMN_DEBT_TOTAL, debtTotal); values.put(MySQLiteHelper.COLUMN_APR, debtApr); values.put(MySQLiteHelper.COLUMN_PAYMENT, paymentGoal); String whereClause = MySQLiteHelper.COLUMN_ID + " = ?"; String[] whereArgs = new String[]{ String.valueOf(updateId) }; return database.update(MySQLiteHelper.TABLE_DEBT, values, whereClause, whereArgs) > 0; } 

Какие-либо предложения?

Solutions Collecting From Web of "Исключение Null Pointer Android SQLite"

Похоже, вы пытаетесь получить доступ к db, когда он был закрыт. Возможно, поместив datasource.open () в начало onCreate и datasource.close () в конце onCreate () и вызывая их каждый раз один раз в своем классе, вы решите свою проблему.

Если вы редактируете, создаете и удаляете элементы в своей деятельности, требующие множественных вызовов в вашу базу данных, подумайте о вызове datasource.open () в начале метода, который обращается к базе данных, а затем завершает () в конце этого метода.

Лучше всего использовать класс SQLiteOpenHelper, который заботится о предоставлении экземпляра SQLiteDatabase, это singleton pattern:

См. Android: java.lang.IllegalStateException: база данных xxx.db (conn # 0) уже закрыта