Как выделить дни из API в выделяемом календаре в Котлине?

#java #android #api #date #kotlin

Вопрос:

У меня есть API, который публикует и получает даты:

это класс данных:

 data class PlannerGet(
val date: String,
val endTime: String,
val id: Int,
val location: String,
val note: String,
val startTime: String,
val title: String
)
 

и я использую эту библиотеку для календаря:
https://github.com/VarunBarad/Highlightable-Calendar-View

теперь во фрагменте я смог выделить определенные дни, подобные этому:

 HighlightableCalendarView.dayDecorators = listOf(
        DayDecorator(
            Calendar.getInstance().apply {
                set(Calendar.DAY_OF_MONTH, 4)
            },
            Color.parseColor("#ffffff"),
            Color.parseColor("#ff0000")
        ),
    )
 

но я хочу выделить те дни, когда я пытался сделать это так
:

 HighlightableCalendarView.dayDecorators = listOf(
        DayDecorator(
            Calendar.getInstance().apply {
                set(PlannerGet.date)
            },
            Color.parseColor("#ffffff"),
            Color.parseColor("#ff0000")
        ),
    )
 

но у меня возникла проблема с «набором», он показывает, что «Ни одна из следующих функций не может быть вызвана с предоставленными аргументами».

я попытался добавить «toInt()» и все та же проблема.

каков правильный способ достичь этого?

Комментарии:

1. Я рекомендую вам не использовать Calendar . Этот класс плохо спроектирован и давно устарел. Вместо этого используйте LocalDate из java.time, современный API даты и времени Java .

Ответ №1:

Это происходит потому, что параметры, которые вы передаете, не соответствуют требуемым параметрам.

  Calendar.getInstance().apply {
            set(Calendar.DAY_OF_MONTH, 4)
        }
 

Функции набора принимают поле int, значение int, но вы передаете параметры в виде строки

 PlannerGet.date
 

Набор функций

 public void set(int field, int value) {
    throw new RuntimeException("Stub!");
}
 

Если вы хотите, чтобы дата передавалась из дат API, пожалуйста, преобразуйте строковые даты в объект даты java.

Ответ №2:

решение:

 if (response?.body().toString() == "[]") {


            }

            else if (response.isSuccessful) {

                response.body()?.forEach {

                    getplanner.add(it)
                    Log.e("gggg gggg",getplanner.toString())
                    Log.e("gggg ddddd",getplanner[0].date)

                }

                val list = arrayListOf<DayDecorator>()

                for (dsds in getplanner) {



                    list.add( DayDecorator(
                        Calendar.getInstance().apply {

                            //  getplanner[0].date
                            val input_date = dsds.date
                            val format1 = SimpleDateFormat("yyyy-MM-dd")
                            var dt1: Date? = null

                            dt1 = format1.parse(input_date)
                            val format2: DateFormat = SimpleDateFormat("dd")
                            val strMonth: String = format2.format(dt1)
                            val month = strMonth.toInt()
                            Log.e("dateinplanner", ""   month)

                            set(Calendar.DAY_OF_MONTH, month)

                        },
                        Color.parseColor("#ffffff"),
                        Color.parseColor("#1AB7B8")

                    ))

                }



                HighlightableCalendarView.dayDecorators = list