代码在没有正确顺序的情况下继续运行

Posted

技术标签:

【中文标题】代码在没有正确顺序的情况下继续运行【英文标题】:code keeps running without proper sequence 【发布时间】:2019-06-02 22:24:39 【问题描述】:

在我的代码中,我有一个日期和时间选择器....但由于某种原因,代码不会等到我选择任何东西,一旦 mDateSetListener 对话框显示,Log.d 就会显示在 Logcat 今天的日期中。 也是第一次显示对话框时,它没有显示 mTimeSetListener,我必须再次请求它才能正常工作 这是我的代码

static void dateAndTimePicker(final Context context, final ListView selectedFood, final int type) 

    contextGlobal = context;
    dateTime = new int[5];
    cal = Calendar.getInstance();
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog dialog = new DatePickerDialog(contextGlobal,
            android.R.style.Theme_Holo_Light_Dialog_MinWidth, mDateSetListener, year, month, day);
    Objects.requireNonNull(dialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();

    mDateSetListener = new DatePickerDialog.OnDateSetListener() 
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) 
            month = month + 1; /*january is 0 (months start with 0 not 1)*/
            Log.d("date is", month + "/" + day + "/" + year);
            dateTime[0] = year;
            dateTime[1] = month;
            dateTime[2] = day;
            hour = cal.get(Calendar.HOUR_OF_DAY);
            minute = cal.get(Calendar.MINUTE);

            TimePickerDialog timePickerDialog = new TimePickerDialog(contextGlobal,
                    android.R.style.Theme_Holo_Light_Dialog_MinWidth, mTimeSetListener, hour, minute, false);
            timePickerDialog.show();
        

    ;

    mTimeSetListener = new TimePickerDialog.OnTimeSetListener() 
        @Override
        public void onTimeSet(TimePicker timePicker, int hour, int minute) 
            Log.d("Time is", hour + ":" + minute);
            dateTime[3] = hour;
            dateTime[4] = minute;
            addFood(contextGlobal, dateTime, selectedFood, type);

        
    ;

    Log.d("date", String.valueOf(day));


提前谢谢你

【问题讨论】:

【参考方案1】:

但由于某种原因,代码不会等到我选择任何内容,并且一旦显示 mDateSetListener 对话框,Log.d 就会在 Logcat 中显示今天的日期。

这是因为,onDateSet 是某种异步调用(等待用户执行操作),只有当用户点击所需的日期表单时才会触发DatePickerDialog

第一次显示对话框时,它没有显示 mTimeSetListener,我必须再次请求它才能正常工作

-- -- --

【讨论】:

这就是重点......代码在我选择日期之前运行 Log.d......并且我第一次选择日期...... timePickerDialog 不运行我必须再次运行 datePickerDialog 才能正常工作 代码将在您选择日期之前运行 Log.d,如答案中所述 那么我怎样才能以不同的方式工作(如果可能的话) 如果要在用户选择日期后打印天的值,请将代码行移动到onDateSet() 它不只是打印......我希望代码在选择完成之前停止,因为选择之后的内容(我没有包括)取决于选择的日期

以上是关于代码在没有正确顺序的情况下继续运行的主要内容,如果未能解决你的问题,请参考以下文章

自定义组件和标签顺序

JS中事件以及语句运行顺序的问题

XP和LINUX的启动顺序

try finally 执行顺序问题

openmp递归任务示例比顺序慢

Uart 接收到正确的字节,但顺序混乱