AsyncTask运行两次

时间:2014-01-09 15:55:42

标签: android android-asynctask datetimepicker

我在我的一个活动中使用AsyncTask。我使用datetime片段将日期作为用户输入,然后根据该输入运行AsyncTask并调用服务。这一切都很好。但主要问题是AsyncTask运行了两次。当我单击按钮datetimefragment打开并选择日期后调用AsyncTask。

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            now=Calendar.getInstance();
            int year = now.get(Calendar.YEAR);
            int month = now.get(Calendar.MONTH);
            int day = now.get(Calendar.DATE);
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        public void onDateSet(DatePicker view, int year, int month, int day) {
            datetime = year+checkDigit(month+1)+checkDigit(day);
            AsyncWSCH call_history  = new AsyncWSCH();
            call_history.execute();
        }
        public String checkDigit(int number)
        {
            return number<=9?"0"+number:String.valueOf(number);
        }
    }

这是按钮点击事件。

@Override
public void onClick(View v) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.show(getFragmentManager(), "DatePicker");
}
else{
 do something else.
}

任何人都可以帮助指出我犯错误的问题以及为什么在两行以下

AsyncWSCH call_history  = new AsyncWSCH();
 call_history.execute();

2 个答案:

答案 0 :(得分:1)

你的onDateSet被召唤两次。

替换为:

public void onDateSet(DatePicker view, int year, int month, int day) {
        String dt = year+checkDigit(month+1)+checkDigit(day);
        if (!dt.equals(datetime)) {
            datetime = dt;
            AsyncWSCH call_history  = new AsyncWSCH();
            call_history.execute();
        }
    }

答案 1 :(得分:0)

这是一个Android错误,onDataSet被调用两次:第一次用户接受日期时,第二次关闭对话框。你可以使用布尔值来处理它。