Проблема при получении данных из БД

Помогите, пожалуйста, выходит такая ошибка: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.beecalc/com.example.beecalc.OpenDate}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1. Так же при создании новой записи (AddDate) 2я запись появляется в RecyclerView, но все предыдущие становятся идентичными последней.

OpenDate:

public class OpenDate extends AppCompatActivity {
int noti;

private AppBarConfiguration appBarConfiguration;
private ActivityOpenDateBinding binding;
public static final int[] NOTIF_DATE = new int[]{6,14,28};
SQLiteDatabase s;

TextView[] tv1;
TextView[] tv3;
TextView tv2;
TextView tv4;
TextView tv5;

int[] d1;
int[] d3;
int d2;
int d4;
int d5;
String date0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Intent intent = getIntent();
    final int bd_id =  intent.getExtras().getInt("id");
    DBManage db = new DBManage(this);
    s = db.getWritableDatabase();

    Cursor cur = s.query(
            DBManage.DB_NAME,   // таблица
            new String[]{DBManage.C_NAME, DBManage.C_PORODA,DBManage.C_NOTIF,DBManage.DB_COLOR,DBManage.DB_DATE},            
            "_id="+bd_id,                  
            null,                  
            null,                  
            null,                  
            null);
    TextView tv_name = findViewById(R.id.tv_name0);
    TextView por = findViewById(R.id.tv_por);
    final TextView color = findViewById(R.id.tv_color);
    TextView date = findViewById(R.id.date0);


    tv_name.setText(cur.getString(cur.getColumnIndex(DBManage.C_NAME))); //ошибка ссылается на эту строку
    por.setText(cur.getString(cur.getColumnIndex(DBManage.C_PORODA)));
    color.setText(cur.getString(cur.getColumnIndex(DBManage.DB_COLOR)));
    date0 =cur.getString(cur.getColumnIndex(DBManage.DB_DATE));
    date.setText(date0);

     tv1 = new TextView[]{
            findViewById(R.id.date1),
            findViewById(R.id.date2),
            findViewById(R.id.date3),
            findViewById(R.id.date4),
            findViewById(R.id.date5),
            findViewById(R.id.date6),
            findViewById(R.id.date7),
            findViewById(R.id.date8),
            findViewById(R.id.date9),
            findViewById(R.id.date11)
    };
     tv3 = new TextView[]{
            findViewById(R.id.date14),
            findViewById(R.id.date15),
            findViewById(R.id.date16),
    };
     tv2 = findViewById(R.id.date12);
     tv4 = findViewById(R.id.date10);
     tv5 = findViewById(R.id.date13);


    //
     d1 = new int[]{1,2,3,4,5,6,7,8,9,11};
     d3 = new int[]{22,25,28}; //+2
     d2 = 15; //+1
     d4 = 10; //+3
     d5 = 17; //+4



    CheckBox notif = findViewById(R.id.cb_notif);

    noti = cur.getInt(cur.getColumnIndex(DBManage.C_NOTIF));
    if (noti ==1) {
        notif.setActivated(true);
    }
    //Cтатус уведомлений
    notif.setOnCheckedChangeListener((buttonView, isChecked) -> {
    if (isChecked){
        noti=1;
        ContentValues cv = new ContentValues();
        cv.put(DBManage.C_NOTIF, noti);
        s.update(DBManage.C_NOTIF,
                cv,
                "ID = ?",new String[]{""+bd_id});
        Toast.makeText(OpenDate.this, "Вам придут уведомления в даты, отмеченные жирным шрифтом.", Toast.LENGTH_LONG).show();

} else{
        noti=0;
        ContentValues cv = new ContentValues();
        cv.put(DBManage.C_NOTIF, noti);
        s.update(DBManage.C_NOTIF,
                cv,
                "ID = ?",new String[]{""+bd_id});
    }
});

    binding = ActivityOpenDateBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    ImageButton del = findViewById(R.id.ib_del);
    del.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder dlg = new AlertDialog.Builder(OpenDate.this);
            dlg.setMessage("Вы уверены, что хотите удалить запись?")
                    .setNegativeButton("Отмена", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    })
                    .setPositiveButton("Удалить", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dele(bd_id);
                        }
                    })
                    .create();
            dlg.show();
        }
    });

}

private void dele(int id) {
    s.delete(DBManage.DB_NAME, "_id = '"+id+"'", null);
    Toast.makeText(OpenDate.this, "Запись успешно удалена.", Toast.LENGTH_SHORT).show();
    Intent i = new Intent(OpenDate.this, MainActivity.class);
    startActivity(i);
    finish();

}


protected void onDestroy() {
    super.onDestroy();
    Intent i = new Intent(OpenDate.this, MainActivity.class);
    startActivity(i);
    finish();
}

@RequiresApi(api = Build.VERSION_CODES.O)
private void fill_tv(){
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    LocalDate localDate = LocalDate.parse(date0, formatter);
    for (int i=0; i<d1.length;i++){
        LocalDate incrementedDate = localDate.plusDays(d1[i]);
        tv1[i].setText(incrementedDate.format(formatter));
    }
    for (int i=0; i<d3.length;i++){
        LocalDate iDate = localDate.plusDays(d3[i]);
        LocalDate iDatee = localDate.plusDays(d3[i]+2);
        tv3[i].setText(iDate.format(formatter)+" - "+iDatee.format(formatter));
    }

    LocalDate iDate = localDate.plusDays(d4);
    LocalDate iDatee = localDate.plusDays(d4+3);
    tv4.setText(iDate.format(formatter)+" - "+iDatee.format(formatter));

    iDate = localDate.plusDays(d5);
    iDatee = localDate.plusDays(d5+3);
    tv5.setText(iDate.format(formatter)+" - "+iDatee.format(formatter));

    iDate = localDate.plusDays(d2);
    iDatee = localDate.plusDays(d2+1);
    tv2.setText(iDate.format(formatter)+" - "+iDatee.format(formatter));
}

DBManage:

public class DBManage extends SQLiteOpenHelper {
public static final String DB_NAME = "dates";
public static String C_NAME = "house";
public static String C_PORODA = "poroda";
public static String C_NOTIF = "notif";
public static String DB_COLOR = "color";
public static String DB_DATE = "date";


public DBManage(Context context) {

    super(context, "dates", null, 1);
}


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + DB_NAME + "("
            + "_id" + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + C_NAME + " TEXT NOT NULL, "
            + C_NOTIF + " INTEGER NOT NULL DEFAULT 0 , "
            + DB_COLOR + " TEXT NOT NULL, "
            + DB_DATE + " TEXT NOT NULL,"
            + C_PORODA + " TEXT NOT NULL )");



}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("drop table if exists " + DB_NAME);
    onCreate(db);
}

}

AddDate (активити для заполнения БД):

public class AddDate extends AppCompatActivity {

private AppBarConfiguration appBarConfiguration;
private ActivityAddDateBinding binding;
EditText TName;
EditText TPoroda;
String color = "";
String date = null;

public AddDate() {
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    binding = ActivityAddDateBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    RadioGroup rg = findViewById(R.id.rg);
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
                case -1:
                    Toast.makeText(getApplicationContext(), "Ничего не выбрано",
                            Toast.LENGTH_SHORT).show();
                    break;
                case R.id.rb_white:
                    color = "Белый";
                    break;
                case R.id.rb_yellow:
                    color = "Желтый";
                    break;
                case R.id.rb_blue:
                    color = "Синий";
                    break;
                case R.id.rb_red:
                    color = "Красный";
                    break;
                case R.id.rb_green:
                    color = "Зеленый";
                    break;

                default:
                    break;
            }
        }
    });

    TPoroda = findViewById(R.id.editTextTextPersonName3);
    TName = findViewById(R.id.editTextTextPersonName);
    CalendarView cal = findViewById(R.id.calendarView);
    cal.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(@NonNull CalendarView calendarView, int year, int month, int day) {
            date = String.format("%02d.%02d.%04d", day, month + 1, year);
        }
    });
    Button save = findViewById(R.id.button);
    final DBManage db = new DBManage(this);

    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if ((TName.getText().length() != 0) & (TPoroda.getText().length() != 0) & (color.length() != 0) & (date != null)) {

                String name = TName.getText().toString();
                String poroda = TPoroda.getText().toString();




                SQLiteDatabase sql = db.getWritableDatabase();
                ContentValues cv = new ContentValues();
                cv.put(DBManage.C_NAME, name);
                cv.put(DBManage.C_PORODA, poroda);
                cv.put(DBManage.DB_COLOR, color);
                cv.put(DBManage.DB_DATE, date);

                sql.insert("dates", null, cv);
                Toast.makeText(AddDate.this, "Запись успешно создана", Toast.LENGTH_LONG).show();
                Intent i = new Intent(AddDate.this, MainActivity.class);
                startActivity(i);
                finish();

            } else {
                Toast toast = Toast.makeText(AddDate.this, "Поля не заполнены", Toast.LENGTH_LONG);
                toast.show();
            }
        }
    });
}
}

Подозреваю, что создание записи работает коряво, вот только причину понять не могу. Спасибо!


Ответы (0 шт):