При удалении элемента из базы данных sqlite произошла ошибка [закрыто]Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 При удалении элемента из базы данных sqlite произошла ошибка [закрыто]

Сообщение Anonymous »

Ошибка удаления элемента из базы данных sqlite.
Пользовательский адаптер

Код: Выделить всё

public class PassAdapter extends RecyclerView.Adapter
 {

Context context;

MainActivity mainActivity;

private static final Object TAG = "SQLiteDatabaseInsert";

List loginDataArrayList;
DatabaseHelper databaseHelper;
private LoginData loginData;

SQLiteDatabase sqLiteDatabase;

private int position;

public PassAdapter(Context context, List loginDataArrayList) {
this.context = context;
this.loginDataArrayList = loginDataArrayList;
}

@NonNull
@Override
public PassViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(context.getApplicationContext()).inflate(R.layout.pass_item, viewGroup, false);
PassViewHolder holder = new PassViewHolder(view);

return holder;
}

@Override
public void onBindViewHolder(@NonNull PassViewHolder holder, int position) {

holder.name_view.setText(loginDataArrayList.get(holder.getBindingAdapterPosition()).getName());
holder.login_view.setText(loginDataArrayList.get(holder.getBindingAdapterPosition()).getLogin());
holder.password_view.setText(loginDataArrayList.get(holder.getBindingAdapterPosition()).getPass());
holder.category_view.setText(loginDataArrayList.get(holder.getBindingAdapterPosition()).getCategory());
holder.menuImage.setImageResource(R.drawable.item_menu_icon);

holder.menuImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(context.getApplicationContext(), v);
popupMenu.getMenuInflater().inflate(R.menu.menu_items, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
ClipboardManager clipboard = (ClipboardManager) context.getApplicationContext().getSystemService(CLIPBOARD_SERVICE);
int idMenuItem = item.getItemId();

Integer getId = loginDataArrayList.get(holder.getBindingAdapterPosition()).getId();
String loginToCopy = loginDataArrayList.get(holder.getBindingAdapterPosition()).getLogin();

if (idMenuItem == R.id.copy_login) {
// copy login
ClipData loginClip = ClipData.newPlainText("Clip", String.valueOf(getId));
clipboard.setPrimaryClip(loginClip);
return true;
} else if (idMenuItem == R.id.copy_pass) {
// copy password

return true;
} else if (idMenuItem == R.id.delete_item) {
// delete item

Log.d("DetailAdapter", "Delete item with ID: " + String.valueOf(getId));
try {
databaseHelper.deleteItemById(getId);
removeItem(holder.getBindingAdapterPosition());
}
catch(Exception error) {
Log.d("DetailAdapter", "Error with delete item(error)");
error.printStackTrace();
}
}
return true;
}
});
}
});
}

@Override
public int getItemCount() {

return loginDataArrayList.size();
}

public void removeItem(int position) {
if (position >= 0 && position <  loginDataArrayList.size()) {
loginDataArrayList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, loginDataArrayList.size());
Toast.makeText(context, "Deleted...", Toast.LENGTH_SHORT).show();
}
}
}
Проблема с удалением элемента

Код: Выделить всё

Log.d("DetailAdapter", "Delete item with ID: " + String.valueOf(getId));
try {
databaseHelper.deleteItemById(getId);
removeItem(holder.getBindingAdapterPosition());
}
catch(Exception error) {
Log.d("DetailAdapter", "Error with delete item(error)");
error.printStackTrace();
}
Помощник по базе данных

Код: Выделить всё

public void deleteItemsByCategory(String categoryName) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, COLUMN_CATEGORY + " = ?", new String[]{categoryName});
db.close();
}

public void deleteItemById(Integer id) {
SQLiteDatabase db = this.getWritableDatabase();
int deletedRows = db.delete(TABLE_NAME, COLUMN_ID + " = ?", new String[]{String.valueOf(id)});
db.close();
if (deletedRows > 0) {
Log.d("DatabaseHelper", "Item with ID " + String.valueOf(id) + " was deleted.");
} else {
Log.d("DatabaseHelper", "No item with ID " + String.valueOf(id) + " was found.");
}
}
При отладке получите правильный идентификационный номер

Код: Выделить всё

Integer getId = loginDataArrayList.get(holder.getBindingAdapterPosition()).getId();
Но после вызова dataHelper.deleteItemById возникает эта ошибка.
В базе данных есть элементы с правильными идентификаторами, имеющие нормальный список из БД.
Я не понимаю, чего не вижу. Пожалуйста, помогите.

Код: Выделить всё

2024-07-23 23:03:09.775   933-933   System.err              com.theray.passbox                   W  java.lang.NullPointerException: Attempt to invoke virtual method 'void com.user.passbox.DatabaseHelper.deleteItemById(java.lang.Integer)' on a null object reference
2024-07-23 23:03:09.778   933-933   System.err              com.theray.passbox                   W      at com.theray.passbox.PassAdapter$1$1.onMenuItemClick(PassAdapter.java:122)
2024-07-23 23:03:09.778   933-933   System.err              com.theray.passbox                   W      at android.widget.PopupMenu$1.onMenuItemSelected(PopupMenu.java:109)
Удалить объект из базы данных.
(Это приложение хочет от меня добавить текст, поэтому я делаю это (слишком закодировано :D)
fdasjgfjswgtfrwesfbsdjuhgsdfsdjbfjugwsefruewuitfgweifhowefjpoqajfcisvuffgsdufgurguweqigruiewgru

Подробнее здесь: https://stackoverflow.com/questions/787 ... have-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»