我遇到了AsyncTask的问题,当我使用这个功能时,90%的它崩溃了,我不知道为什么。我能做些什么呢? obs:忽略返回类型
protected Boolean doInBackground(ArrayList<cldetailday>... params){ boolean HaveOpenHour = false; ArrayList<String> lstHours = new ArrayList<String>(); ArrayList<cldetailday> lstdetail = new ArrayList<cldetailday>(); Time _time = new Time(); _time.hour = 0; _time.minute = 0; try { lstdetail = params[0]; if(lstdetail != null & lstdetail.size() > 0){ for(int i = 0; i < lstdetail.size(); i++){ lstHours.add(lstdetail.get(i).getHora()); if(((i+1)%2 == 0)){ // Fechei um lancamento HaveOpenHour = true; _time.hour += UtilsDate.Instance().TimeDiff(lstHours.get(i-1),lstHours.get(i)).getHour(); _time.minute += UtilsDate.Instance().TimeDiff(lstHours.get(i-1),lstHours.get(i)).getMinute(); } else{ HaveOpenHour = false; } } } // Temos horas em aberto, inserimos a hora atual para fechar esse lancamento if(!HaveOpenHour){ // temos alguem na lista para processar horas if(lstHours != null && lstHours.size() > 0){ clHour hour = UtilsDate.Instance().getCurrentHour(); _time.hour += UtilsDate.Instance().TimeDiff(lstHours.get(lstHours.size() - 1), hour.getStringHour()).getHour(); _time.minute += UtilsDate.Instance().TimeDiff(lstHours.get(lstHours.size() - 1), hour.getStringHour()).getMinute(); _time.normalize(true); } } return true; } catch (Exception e) { // TODO: handle exception Log.e("Error doBackground: ", e.getMessage()); return false; }
protected Boolean doInBackground(ArrayList<cldetailday>... params){ boolean HaveOpenHour = false; ArrayList<String> lstHours = new ArrayList<String>(); ArrayList<cldetailday> lstdetail = new ArrayList<cldetailday>(); Time _time = new Time(); _time.hour = 0; _time.minute = 0; try { lstdetail = params[0]; if(lstdetail != null & lstdetail.size() > 0){ for(int i = 0; i < lstdetail.size(); i++){ lstHours.add(lstdetail.get(i).getHora()); if(((i+1)%2 == 0)){ // Fechei um lancamento HaveOpenHour = true; _time.hour += UtilsDate.Instance().TimeDiff(lstHours.get(i-1),lstHours.get(i)).getHour(); _time.minute += UtilsDate.Instance().TimeDiff(lstHours.get(i-1),lstHours.get(i)).getMinute(); } else{ HaveOpenHour = false; } } } // Temos horas em aberto, inserimos a hora atual para fechar esse lancamento if(!HaveOpenHour){ // temos alguem na lista para processar horas if(lstHours != null && lstHours.size() > 0){ clHour hour = UtilsDate.Instance().getCurrentHour(); _time.hour += UtilsDate.Instance().TimeDiff(lstHours.get(lstHours.size() - 1), hour.getStringHour()).getHour(); _time.minute += UtilsDate.Instance().TimeDiff(lstHours.get(lstHours.size() - 1), hour.getStringHour()).getMinute(); _time.normalize(true); } } return true; } catch (Exception e) { // TODO: handle exception Log.e("Error doBackground: ", e.getMessage()); return false; }
错误:
答案 0 :(得分:1)
Log.e("Error doBackground: ", e.getMessage());
更改为
Log.wtf("Your asyntask TAG","Error doBackground: ",e);
可能发生这种情况的原因是e.getMessage()不返回任何消息,而在Log.wtf方法中,您可以在方法中传递异常实例(可以为null)。
答案 1 :(得分:0)
它在行中失败
Log.e("Error doBackground: ", e.getMessage());
不是吗?
您的异常e
对象没有消息,并在null
上返回e.getMessage()
。