前提・実現したいこと
Listviewのアイテムを長押しして削除を行う処理を追加しようとしています。
ですがSQL文を実行する行で以下のようなエラーが起きてしまいます。
IDを基に行を削除する処理をしています。
発生している問題・エラーメッセージ
java.lang.NullPointerException: Attempt to invoke virtual method int android.database.sqlite.SQLiteDatabase.delete (java.lang.String, java.lang.String, java.lang.String [])' on a null object reference
該当のソースコード
Java
1 タブ1のリストを長押しした場合 2 private class OnItemLongClickListener implements AdapterView.OnItemLongClickListener { 3 4 public boolean onItemLongClick(AdapterView<?> parent, View view , int position, long id) { 5 //ダイアログ準備 6 AlertDialog.Builder builder = new AlertDialog.Builder(Tab_01.this); 7 builder.setTitle("削除しますか?"); 8 builder.setPositiveButton("はい", new DialogInterface.OnClickListener() { 9 @Override 10 public void onClick(DialogInterface dialog, int which) { 11 User user = userList.get(userList.size() - 1 - position); 12 long UserId = user.getId(); 13 db.delete(DB1.TABLE_NAME, "id = " + UserId, null);//ここでエラー 14 userList.remove(position); 15 userAdapter.notifyDataSetChanged(); 16 } 17 }); 18 builder.setNegativeButton("いいえ",null); 19 builder.setCancelable(true); 20 builder.show(); 21 return true; 22 } 23 } 24
DBHelper_1.java
1package com.example.todoschedule; 2 3import android.content.ContentValues; 4import android.content.Context; 5import android.database.Cursor; 6import android.database.sqlite.SQLiteDatabase; 7import android.database.sqlite.SQLiteOpenHelper; 8 9public class DBHelper_1 extends SQLiteOpenHelper { 10 11 public static final String DATABASE_NAME = "lv1.db"; 12 public static final String TABLE_NAME = "lv1_data"; 13 //public static final String COL1 = "ID"; 14 public static final String COL2 = "TITLE"; 15 public static final String COL3 = "DATE"; 16 public static final String COL4 = "TIME"; 17 public static final String COL5 = "TODO1"; 18 public static final String COL6 = "TODO2"; 19 public static final String COL7 = "TODO3"; 20 public static final String COL8 = "TODO4"; 21 public static final String COL9 = "TODO5"; 22 23 24 public DBHelper_1(Context context) { 25 super(context, DATABASE_NAME, null, 1); 26 } 27 28 @Override 29 public void onCreate(SQLiteDatabase db) { 30 String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " + 31 " TITLE TEXT, DATE TEXT, TIME TEXT,TODO1 TEXT,TODO2 TEXT,TODO3 TEXT,TODO4 TEXT,TODO5 TEXT)"; 32 db.execSQL(createTable); 33 } 34 35 @Override 36 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 37 db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 38 onCreate(db); 39 } 40 41 //データの追加処理 42 public boolean addData(String title, String date,String time,String todo1,String todo2,String todo3,String todo4,String todo5) { 43 SQLiteDatabase db = this.getWritableDatabase(); 44 ContentValues contentValues = new ContentValues(); 45 contentValues.put(COL2, title); 46 contentValues.put(COL3, date); 47 contentValues.put(COL4, time); 48 contentValues.put(COL5, todo1); 49 contentValues.put(COL6, todo2); 50 contentValues.put(COL7, todo3); 51 contentValues.put(COL8, todo4); 52 contentValues.put(COL9, todo5); 53 long result = db.insert(TABLE_NAME, null, contentValues); 54 55 //日付が正しく挿入されていない場合は-1が返されます 56 if (result == -1) { 57 return false; 58 } else { 59 return true; 60 } 61 } 62 63 //1週間のクエリを繰り返す 64 public Cursor getListContents() { 65 SQLiteDatabase db = this.getWritableDatabase(); 66 Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 67 return data; 68 } 69 70 //タイトルを引数にデータベースから削除するdelete処理 71// public void delete (String title) { 72// 73// String sqlDelete = dbContext.getString(R.string.db_DELETE_INSERT_delete); 74// SQLiteStatement stmt = db.compileStatement(sqlDelete); 75// stmt.bindString(1,title); 76// stmt.executeUpdateDelete(); 77// 78// } 79} 80
UserAdapter.java
1package com.example.todoscheduletest; 2 3import android.view.LayoutInflater; 4import android.view.View; 5import android.view.ViewGroup; 6import android.widget.BaseAdapter; 7import android.widget.TextView; 8 9import java.util.List; 10 11class UserAdapter extends BaseAdapter { 12 private List<User> userList; 13 14 UserAdapter(List<User> userList) { 15 this.userList = userList; 16 } 17 18 @Override 19 public int getCount() { 20 if(userList == null) return 0; 21 return userList.size(); 22 } 23 24 @Override 25 public Object getItem(int position) { 26 return userList.get(position); 27 } 28 29 @Override 30 public long getItemId(int position) { 31 return position; 32 } 33 34 private class ViewHolder { 35 final TextView titleText; 36 final TextView dateText; 37 ViewHolder(View v) { 38 titleText = v.findViewById(R.id.titleName); 39 dateText = v.findViewById(R.id.dateName); 40 } 41 } 42 43 @Override 44 public View getView(int position, View view, ViewGroup viewGroup) { 45 46 if(view == null) { 47 view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.lv_adapter, viewGroup, false); 48 view.setTag(new ViewHolder(view)); 49 } 50 ViewHolder vh = (ViewHolder)view.getTag(); 51 User user = userList.get(getCount() - 1 - position); 52 vh.titleText.setText(user.title); 53 vh.dateText.setText(user.date); 54 55 return view; 56 } 57} 58
補足情報(FW/ツールのバージョンなど)
Gradleバージョン:7.0.2
回答1件
あなたの回答
tips
プレビュー