StackOverflowError при использовании Android setMinDate () календаря - PullRequest
0 голосов
/ 09 января 2020

screen of my problem

см. Ошибку, показанную на рисунке выше.

Эта проблема проявляется, когда я установил calendarView.setMinDate, и я не могу решить, сталкиваюсь ли я с этой проблемой, когда Я использую календарь

Фоновое параллельное копирование. G C освобождено 98234 (2 МБ) объектов AllocSpace, 1 (1564 КБ) объектов LOS, 41% свободных, 34 МБ / 58 МБ, приостановлено 139 всего 366,099 мс

вот мой код

 public class select_time extends BaseActivity {

    @BindView(R.id.calendarView)
    CalendarView calendarView;
    DatesView datesView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select_time);
        ButterKnife.bind(this);
        in = getIntent().getBooleanExtra("in", true);
        datesView = new DatesView(findViewById(R.id.datesView));
        datesView.setOnCalenderClick(new DatesView.onClenderClick() {
            @Override
            public void OnClick(boolean in) {
                setWanted(in);
            }
        });
        datesView.refresh(this);
        refreshCalendar();
        calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(CalendarView view, int year, int month, int day) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(year, month, day, 0, 0, 0);
                SharedPreferences prefs = getSharedPreferences("data", 0);
                prefs.edit().putLong((in ? "in" : "out") + "_date", calendar.getTimeInMillis()).apply();
                if (in) {
                    if (calendar.getTimeInMillis() == out_date.getTime() || calendar.getTimeInMillis() >= out_date.getTime()) {
                        calendar.add(Calendar.DATE, 1);
                        prefs.edit().putLong("out_date", calendar.getTimeInMillis()).apply();
                    }
                } else {
                    if (calendar.getTimeInMillis() == out_date.getTime() || calendar.getTimeInMillis() <= out_date.getTime()) {
                        calendar.add(Calendar.DATE, -1);
                        prefs.edit().putLong("in_date", calendar.getTimeInMillis()).apply();
                    }
                }
                datesView.refresh(select_time.this);
            }
        });
    }
    Date in_date,out_date;
    public void refreshCalendar(){
        SharedPreferences prefs = getSharedPreferences("data", 0);
        in_date = new Date(prefs.getLong("in_date", 0));
        out_date = new Date(prefs.getLong("out_date", 0));
        calendarView.setMinDate(System.currentTimeMillis() - 1000);
        calendarView.setDate(in ? in_date.getTime() : out_date.getTime());
        setWanted(in);

    }
    boolean in;
    public void setWanted(boolean in) {
        this.in = in;
        datesView.check_in.setBackgroundColor(getResources().getColor(in ? R.color.gray : R.color.white));
        datesView.check_out.setBackgroundColor(getResources().getColor(!in ? R.color.gray : R.color.white));
        refreshCalendar();
    }
    public void clickDone(View view) {
        finish();
    }
}

Может кто-нибудь помочь мне с использованием Каландра?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Вы звоните setWanted(in); с refreshCalendar(), а также звоните refreshCalendar(); с setWanted(boolean in). Это создает бесконечный вызов l oop, который в итоге исчерпывает стек. Вам нужно удалить один из этих двух вызовов.

0 голосов
/ 09 января 2020

Полагаю, это потому, что вы вызываете refreshCalendar(); в setWanted, который вызывается в calenderOnChange, который затем снова вызывается с datesView.refresh, поэтому вы вызываете его снова и снова, поэтому вам нужно удалить это l oop. Возможно с удалением refreshCalendar(); в setWanted.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...