我使用“房间持久性”,并且在Recycleview上删除一项时遇到问题,当我们在Recycleview上单击btnDelete时,它将出现错误“ Attempt to invoke virtual method 'com.example.submade4.db.FavoriteView com.example.submade4.db.FavoriteDatabase.favoriteView()' on a null object reference
”。
这是我的DAO:
@Delete
void deleteFavorite(FavoriteData favoriteData);
这是我的适配器,我已经将查询结果输入到实体(模型),但是仍然存在错误:
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.example.submade4.CustomOnItemClickListener;
import com.example.submade4.R;
import com.example.submade4.db.FavoriteDatabase;
import com.example.submade4.entity.FavoriteData;
import java.util.ArrayList;
public class AdapterFavorite extends RecyclerView.Adapter<AdapterFavorite.ViewHolder> {
private ArrayList<FavoriteData> daftarFavorite;
private Context context;
private FavoriteActivity favoriteActivity;
private FavoriteDatabase database;
private static final String EXTRA_KEY = "KEY";
AdapterFavorite(ArrayList<FavoriteData> daftarFavorite, Context context) {
//Inisialisasi data yang akan digunakan
this.daftarFavorite = daftarFavorite;
this.context = context;
}
class ViewHolder extends RecyclerView.ViewHolder{
//Deklarasi View yang akan digunakan
private TextView Judul, release, type;
private ImageView ivFavorite;
private ImageButton btnDelete;
ViewHolder(View itemView) {
super(itemView);
Judul = itemView.findViewById(R.id.tv_favorite_name);
type =itemView.findViewById(R.id.tv_favorite_type);
release = itemView.findViewById(R.id.tv_item_release);
ivFavorite = itemView.findViewById(R.id.img_item_favorite);
btnDelete = itemView.findViewById(R.id.deleteFav);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//Inisialisasi Layout Item untuk RecyclerView
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview_favorite, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int i) {
//Deklarasi Variable untuk mendapatkan data dari Database melalui Array
String getJudul = daftarFavorite.get(i).getJudul();
String getRelease = daftarFavorite.get(i).getRelease();
String fotoUrl = "https://image.tmdb.org/t/p/w342/"+daftarFavorite.get(i).getPath();
String getType = daftarFavorite.get(i).getType();
int idS = daftarFavorite.get(i).getId();
Log.e("Idne : ", String.valueOf(idS));
//Menampilkan data berdasarkan posisi Item dari RecyclerView
holder.Judul.setText(getJudul);
holder.release.setText(getRelease);
Glide.with(context).load(fotoUrl).into(holder.ivFavorite);
holder.type.setText(getType);
FavoriteData favoriteData = new FavoriteData();
favoriteData.setJudul(daftarFavorite.get(i).getJudul());
favoriteData.setDeskripsi(daftarFavorite.get(i).getDeskripsi());
favoriteData.setRelease(daftarFavorite.get(i).getRelease());
favoriteData.setBahasa(daftarFavorite.get(i).getBahasa());
favoriteData.setType(daftarFavorite.get(i).getType());
favoriteData.setPath(daftarFavorite.get(i).getPath());
holder.btnDelete.setOnClickListener(new CustomOnItemClickListener(i, (view, position) -> {
FavoriteData favoriteDelete = new FavoriteData();
favoriteDelete.setJudul(daftarFavorite.get(i).getJudul());
favoriteDelete.setDeskripsi(daftarFavorite.get(i).getDeskripsi());
favoriteDelete.setRelease(daftarFavorite.get(i).getRelease());
favoriteDelete.setBahasa(daftarFavorite.get(i).getBahasa());
favoriteDelete.setType(daftarFavorite.get(i).getType());
favoriteDelete.setPath(daftarFavorite.get(i).getPath());
deleteTask(favoriteDelete);
}));
holder.itemView.setOnClickListener(v -> {
Intent intent = new Intent(context.getApplicationContext(), DetailFavorite.class);
intent.putExtra(EXTRA_KEY, (Parcelable) favoriteData);
intent.putExtra("type", "movie");
context.startActivity(intent);
});
}
@Override
public int getItemCount() {
//Menghitung data / ukuran dari Array
return daftarFavorite.size();
}
private void deleteTask(final FavoriteData favoriteData) {
class DeleteTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
database.favoriteView().deleteFavorite(favoriteData);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Toast.makeText(context, "Deleted", Toast.LENGTH_LONG).show();
}
}
DeleteTask dt = new DeleteTask();
dt.execute();
}
}
这是MyDatabase:
@Database(entities = {FavoriteData.class}, version = 1)
public abstract class FavoriteDatabase extends RoomDatabase {
public abstract FavoriteView favoriteView();
}
我尝试了另一种方法,但遇到相同的错误。请帮忙。 谢谢