Проблема удаления данных из базы данных помещений (Android Studio Java)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема удаления данных из базы данных помещений (Android Studio Java)

Сообщение Anonymous »

У меня есть 7 классов: класс MainActivity (место, где отображается представление Recycler), класс AddNote, класс UpdateNote, класс NoteDao, класс NoteDatabase (я использую одноэлементную структуру базы данных), класс NoteAdapter и класс Note (модель)
Ниже приведены результаты моих текущих кодов:
1-й: изначально нет Элемент заметки в представлении Recycler, поэтому я нажимаю кнопку «ДОБАВИТЬ», чтобы добавить несколько примечаний, например: 1 и 2.
ПЕРВОЕ ИЗОБРАЖЕНИЕ
2-е: Когда я нажимаю «переработать» bin», для каждого элемента появится кнопка удаления, и я смогу удалить этот элемент.
ВТОРОЕ ИЗОБРАЖЕНИЕ
3-е: Итак, я нажимаю «Удалить», и это кажется ПРАВИЛЬНЫМ. для просмотра Recycler:
ТРЕТЬЕ ИЗОБРАЖЕНИЕ
4-е: Итак, когда я хочу добавить новую заметку, например: 3, 4 и 5, это тоже кажется ПРАВИЛЬНЫМ.
ЧЕТВЕРТОЕ ИЗОБРАЖЕНИЕ
ПЯТОЕ ИЗОБРАЖЕНИЕ
ПЯТОЕ: ПРОБЛЕМА ЗДЕСЬ: Когда я хочу просмотреть каждую заметку, появляются ее детали раньше!
Например: когда я нажимаю на цифру 3, я получаю 1
клик 4, дайте мне 2
клик 5, дайте мне 3... и т. д.
Я смотрю на это целых 2 дня, используя CHATGPT, CLAUDEAI, YOUTUBE, STACKOVERFLOW, GOOGLE, но до сих пор не понял. КАК РЕШИТЬ эту проблему... :( Я ооочень устал.
/>ИМО: мне кажется, что это связано с тем, что я неправильно написал код удаления элемента из базы данных. ПРОБЛЕМА теперь заключается в том, что ЭЛЕМЕНТ успешно удален из RecyclerView, но не удалось удалить из базы данных помещений...
ЭТО МОЙ класс NoteAdapter:

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

package com.example.tostudylistv2.RecyclerView;

import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.tostudylistv2.Activities.MainActivity;
import com.example.tostudylistv2.Activities.UpdateNote;
import com.example.tostudylistv2.Database.NoteDatabase;
import com.example.tostudylistv2.Note;
import com.example.tostudylistv2.R;

import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class NoteAdapter extends RecyclerView.Adapter{
private Context context;
private List noteList;
private boolean showDoDel = false;

public NoteAdapter(Context context, List noteList) {
this.context = context;
this.noteList = noteList;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.note,parent,false); // to let all UI/ View in the XML layout to be usable
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.txtNote.setText(noteList.get(position).getTitle());
holder.txtNote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"WORK",Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
Intent i = new Intent(context, UpdateNote.class);
i.putExtra("position",position);
context.startActivity(i);

}
});

if (showDoDel) {
holder.btnDoDel.setVisibility(View.VISIBLE);
holder.btnDoDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
delNoteInBackground(noteList.get(position));
}
});
}
else {
holder.btnDoDel.setVisibility(View.GONE);
}

}
public void delNoteInBackground(Note note) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executorService.execute(new Runnable() {
@Override
public void run() {

NoteDatabase.getInstance(context).getNoteDao().deleteNote(note);

handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Deleted from the database!", Toast.LENGTH_SHORT).show();
if (!noteList.isEmpty()) {
noteList.remove(note);
notifyDataSetChanged();
}
else {
Toast.makeText(context,"Nothing to delete",Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
@Override
public int getItemCount() {
return noteList.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder { //initialize all the UI element/ view of the item here

private TextView txtNote;
private ImageView btnDoDel;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtNote = itemView.findViewById(R.id.txtNote);
btnDoDel = itemView.findViewById(R.id.btnDoDel);
}
}

public void setNoteList(List  noteList) {
this.noteList = noteList;
}
public void setShowDoDel(boolean showDoDel) {
this.showDoDel = showDoDel;
}

}
Это мой класс MainActivity:

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

package com.example.tostudylistv2.Activities;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.tostudylistv2.Database.NoteDatabase;
import com.example.tostudylistv2.Note;
import com.example.tostudylistv2.RecyclerView.NoteAdapter;
import com.example.tostudylistv2.R;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {

private RecyclerView noteRecView;
private List noteList = new ArrayList();
private FloatingActionButton btnAdd, btnDel, btnBack;
private ImageView btnDoDel;
private EditText input;
ActivityResultLauncher activityResultLauncher;
private NoteAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});

noteRecView = findViewById(R.id.noteRecView);

init();
initListener();

initActivityLauncher();

adapter = new NoteAdapter(this, noteList);
noteRecView.setAdapter(adapter);

LinearLayoutManager lm = new LinearLayoutManager(this);
noteRecView.setLayoutManager(lm);

getNoteInBackground();

}

public void init() {
btnAdd = findViewById(R.id.btnAdd);
btnDel = findViewById(R.id.btnDel);
btnBack = findViewById(R.id.btnBack);
btnDoDel = findViewById(R.id.btnDoDel);
input = findViewById(R.id.input);
}

public void initListener() {
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, AddNote.class);
activityResultLauncher.launch(i);
}
});

btnDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.setShowDoDel(true);
adapter.notifyDataSetChanged();  //***important, to refresh the RecView and display the result!!!
btnDel.setVisibility(View.GONE);
btnBack.setVisibility(View.VISIBLE);
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

btnBack.setVisibility(View.GONE);
adapter.setShowDoDel(false);
adapter.notifyDataSetChanged();
btnDel.setVisibility(View.VISIBLE);

}
});
}

public void addNoteInBackground(Note note) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executorService.execute(new Runnable() {
@Override
public void run() {
NoteDatabase.getInstance(MainActivity.this).getNoteDao().addNote(note);

handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "Added to the database!", Toast.LENGTH_SHORT).show();
noteList.add(note);
adapter.notifyDataSetChanged();
}
});
}
});
}

public void getNoteInBackground() {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executorService.execute(new Runnable() {
@Override
public void run() {
noteList = NoteDatabase.getInstance(MainActivity.this).getNoteDao().getAllNote();

handler.post(new Runnable() {
@Override
public void run() {
adapter.setNoteList(noteList);
adapter.notifyDataSetChanged();

}
});
}
});
}

public void initActivityLauncher() {
activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback() {
@Override
public void onActivityResult(ActivityResult activityResult) {
int result = activityResult.getResultCode();
Intent data = activityResult.getData();

if (result == RESULT_OK && data != null) {
String newTitle = data.getStringExtra("tempTitle");
if (newTitle != null && !newTitle.isEmpty()) {
Note newNote = new Note(newTitle);
addNoteInBackground(newNote);
}
} else {
Toast.makeText(MainActivity.this, "Operation canceled", Toast.LENGTH_SHORT).show();
}
}
});
}

}
Он должен успешно удалить элемент из базы данных RecyclerView и Room.

Подробнее здесь: https://stackoverflow.com/questions/785 ... tudio-java
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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