База данных не отображается в RecyclerViewJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 База данных не отображается в RecyclerView

Сообщение Гость »

Несколько дней назад у меня не было этой проблемы, я мог добавить новые записи в базу данных/список блюд, и они будут добавлены в список уже созданных блюд. Долгое время у меня были проблемы с удалением из списка, но когда я наконец заставил кнопку удаления работать, я понял, что больше не могу добавлять в список. Или вот как это выглядит. Когда я проверил базу данных в файле sql, который я скачал из данных, он показал, что каждый новый ввод все еще обновляется в базе данных. Но в настоящее время RecyclerView показывает только пустой экран. Можете ли вы помочь мне диагностировать проблему?
Я пробовал разные варианты notifyDataSetChange() в своем адаптере, но это все равно не помогло. Я думал, что если данные обновляются, они должны отображаться в списке, но, видимо, нет.
Я считаю, что проблема в моей основной активности или адаптере номинального блюда
Это мой MainActivity.java:
package com.example.restaurantrater;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

EditText Restaurant_name;
EditText Restaurant_address;
Button save_btn;

private RestaurantDBhelper dbHelper;
private RecyclerView recyclerView;
private RatedDishAdapter adapter;

private static int restIDcount = 0;
private ArrayList ratedDishes;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

dbHelper = new RestaurantDBhelper(this);

Restaurant_name = findViewById(R.id.restaurant_name);
Restaurant_address = findViewById(R.id.streetaddress);
save_btn = findViewById(R.id.save_dish);

save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String nrestaurant_n = Restaurant_name.getText().toString();
String nrestaurant_a = Restaurant_address.getText().toString();

restIDcount++;

// Insert restaurant details into the database
long result = dbHelper.insertRestaurant(nrestaurant_n, nrestaurant_a);
if (result != -1) {
// Restaurant inserted successfully, navigate to DishRater
Intent intent = new Intent(MainActivity.this, DishRater.class);
intent.putExtra("restaurantid", restIDcount);
startActivity(intent);
} else {
// Failed to insert restaurant
// Handle error, show toast or log error
}
}
});

// RecyclerView setup
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

// Initialize adapter for RecyclerView
ratedDishes = new ArrayList();
adapter = new RatedDishAdapter(ratedDishes, this);
recyclerView.setAdapter(adapter);

// Set up click listener for delete actions in the adapter
adapter.setOnItemClickListener(new RatedDishAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// Handle item click if needed
}

@Override
public void onDeleteClick(int position) {
RatedDish deletedDish = ratedDishes.get(position);
boolean isDeleted = dbHelper.deleteDish(deletedDish.getId());
if (isDeleted) {
Toast.makeText(MainActivity.this, "Dish deleted successfully", Toast.LENGTH_SHORT).show();
// Remove the deleted item from the RecyclerView
ratedDishes.remove(position);
adapter.notifyItemRemoved(position);
} else {
Toast.makeText(MainActivity.this, "Failed to delete dish", Toast.LENGTH_SHORT).show();
}
}
});
}

@Override
protected void onResume() {
super.onResume();
// Retrieve list of rated meals from the database
retrieveRatedDishesFromDatabase();
// Update the adapter with the new list of rated dishes
adapter.updateData(ratedDishes);
}

private void retrieveRatedDishesFromDatabase() {
// Call getAllRatedDishes() method from RestaurantDBhelper
ratedDishes.clear();
ratedDishes.addAll(dbHelper.getAllRatedDishes());
adapter.updateData(ratedDishes);
}
}


This is my RatedDishAdapter.java: package com.example.restaurantrater;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

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

import java.util.ArrayList;

public class RatedDishAdapter extends RecyclerView.Adapter {

private ArrayList ratedDishes;
private OnItemClickListener clickListener; // Define listener
private Context context; // Add context field
private RestaurantDBhelper dbHelper; // Add dbHelper field

public RatedDishAdapter(ArrayList ratedDishes, Context context) {
this.ratedDishes = ratedDishes;
this.context = context; // Initialize context
this.dbHelper = new RestaurantDBhelper(context); // Initialize dbHelper
}

public interface OnItemClickListener {
void onItemClick(int position);
void onDeleteClick(int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
this.clickListener = listener;
}

@NonNull
@Override
public RatedDishViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rated_dish, parent, false);
return new RatedDishViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull RatedDishViewHolder holder, int position) {
RatedDish ratedDish = ratedDishes.get(position);
holder.textDishName.setText(ratedDish.getName());
holder.textRating.setText(String.valueOf(ratedDish.getRating()));

// Set click listener for the delete button
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (clickListener != null) {
int position = holder.getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onDeleteClick(position);
}
}
}
});
}

@Override
public int getItemCount() {
return ratedDishes.size();
}

public class RatedDishViewHolder extends RecyclerView.ViewHolder {
public TextView textDishName;
public TextView textRating;
public Button deleteButton;

public RatedDishViewHolder(@NonNull View itemView) {
super(itemView);
textDishName = itemView.findViewById(R.id.textViewDishName);
textRating = itemView.findViewById(R.id.textViewRating);
deleteButton = itemView.findViewById(R.id.buttonDelete);

// Set click listener for the delete button
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (clickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onDeleteClick(position);
}
}
}
});

// Set click listener on the item view
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onItemClick(position);
}
}
}
});
}
}

// Update the data in the adapter
public void updateData(ArrayList newData) {
ratedDishes.clear();
ratedDishes.addAll(newData);
notifyDataSetChanged();
}
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... cyclerview
Ответить

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

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

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

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

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