我在我的一个活动中使用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();
答案 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
被调用两次:第一次用户接受日期时,第二次关闭对话框。你可以使用布尔值来处理它。