fragment用handler更新UI报错

2017-01-01 09:09
主要是在我用一个Timer计时器每一秒更新一下TextView里的文字,但是不知为何会报错,求大神搭救。
       小弟第一次发求助贴,不会把代码弄得好看,字数原因,把部分代码删除了,请见谅。
public class GoodListOfSecondKillFragment extends Fragment implements OnClickListener{
HomeActivity homeActivity;
View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.activity_goodslistofsecondkill, container,
false);

homeActivity = (HomeActivity) getActivity();

initView();
 GregorianCalendar bT = new GregorianCalendar(2015,4-1,29,23,30);
         GregorianCalendar eT = new GregorianCalendar(2015,4-1,29,23,00);
         long nowTime =0,beginTime =0,endTime =0;
         try {
 nowTime = new SimpleDateFormat("yyyyMMddHHmmss").parse(DateFormat.format("yyyyMMddHHmmss",Calendar.getInstance().getTime()).toString()).getTime();
 beginTime  = new SimpleDateFormat("yyyyMMddHHmmss").parse(DateFormat.format("yyyyMMddHHmmss", bT.getTime()).toString()).getTime();
 endTime = new SimpleDateFormat("yyyyMMddHHmmss").parse(DateFormat.format("yyyyMMddHHmmss",eT.getTime()).toString()).getTime();
         } catch (ParseException e) {
e.printStackTrace();
}
         int time[] =  initTime(nowTime,beginTime,endTime);
         if(time[0]<10){
           hh.setText("0"+time[0]+"");
          }else {
           hh.setText(time[0]+"");
          }
          if(time[1]<10){
           mm.setText("0"+time[1]+"");
          }else {
            mm.setText(time[1]+"");
          }
          if(time[2]<10){
           ss.setText("0"+time[2]+"");
          }else {
           ss.setText(time[2]+"");
          }
// startTimer();
timer = new Timer();
timer.schedule(timertask,1000,1000);
return rootView;
}
TimerTask timertask = new TimerTask() {

@Override
public void run() {
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
}
};
/**
     * 更新Timer
     */
    Handler handler = new Handler(){
     public void handleMessage(Message msg) {
     switch(msg.what){
     case 1:
     int time[] = timerImpl(hh.getText().toString(),mm.getText().toString(),ss.getText().toString());
     if(time[0]<10){
                 hh.setText("0"+time[0]+"");             //此处报错
                }else {
         hh.setText(time[0]+"");
                }
                if(time[1]<10){
                 mm.setText("0"+time[1]+"");
                }else {
                    mm.setText(time[1]+"");
                }
                if(time[2]<10){
                 ss.setText("0"+time[2]+"");
                }else {
                    ss.setText(time[2]+"");
                }
     break;
     }
     }
    };

// goodsName
public void init(String orderBy, String orderType, int beginCount,
int selectCount, String gc_id, String keyword, String gb_id,
String queryType) {
String url = "/app/goods_list.htm";
Map paraMap = new HashMap();
// if (gc_id != null) {
paraMap.put("gc_id",gc_id);
// }
if (keyword != null && !keyword.equals("")) {
paraMap.put("keyword", keyword);
}
if (gb_id != null) {
paraMap.put("gb_id", gb_id);
}
if (queryType != null && !queryType.equals("")) {
paraMap.put("queryType", null);
}
if (store_id != null && !store_id.equals("")) {
paraMap.put("store_id", store_id);
}

paraMap.put("orderBy", orderBy);
paraMap.put("orderType", orderType);
paraMap.put("beginCount", beginCount);
paraMap.put("selectCount", selectCount);
try {
String jsonString = homeActivity.sendPost(url, paraMap);
JSONObject result = new JSONObject(jsonString);// 转换为JSONObject
JSONArray nameList = result.getJSONArray("goods_list");// 获取JSONArray
int length = nameList.length();

for (int i = 0; i < length; i++) {// 遍历JSONArray
JSONObject oj = nameList.getJSONObject(i);
Map goods_map = new HashMap();
goods_map.put("id", oj.getInt("id"));
goods_map.put("goods_main_photo",
oj.getString("goods_main_photo"));
goods_map.put("goods_name", oj.getString("goods_name"));
goods_map.put("goods_current_price",
oj.getString("goods_current_price"));
goods_map.put("goods_salenum", oj.getString("goods_salenum"));
goods_map.put("status", oj.getString("status"));
goods_map.put("evaluate", oj.getString("evaluate"));
goods.add(goods_map);
}
if (length == 0) {
// 无数据
nodata();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

this.beginCount += selectCount;
}

void nodata() {
if (goods.size() == 0) {
mPullRefreshListView.setVisibility(View.GONE);
nodata = (TextView) rootView.findViewById(R.id.second_kill_nodata);
nodata.setVisibility(View.VISIBLE);
}
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String tag = v.getTag().toString();
if (orderBy.equals(tag)) {
if (tag.equals("goods_current_price")) {
if (orderByType.equals("asc")) {
orderByType = "desc";
orderbypriceimg.setImageDrawable(homeActivity
.getResources().getDrawable(R.drawable.pricedown));
} else {
orderByType = "asc";
orderbypriceimg.setImageDrawable(homeActivity
.getResources().getDrawable(R.drawable.priceup));
}
goods.clear();
beginCount = 0;
init(orderBy, orderByType, beginCount, selectCount, gc_id,
keyword, gb_id, queryType);
mAdapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();
actualListView.setSelection(1);
}
} else {
if (tag.equals("goods_current_price")) {
orderbypriceimg.setImageDrawable(homeActivity.getResources()
.getDrawable(R.drawable.pricedown));
} else {
orderbypriceimg.setImageDrawable(homeActivity.getResources()
.getDrawable(R.drawable.priceno));
}
orderBy = tag;
orderByType = "desc";
setNowOrderBy(v);
goods.clear();
beginCount = 0;
init(orderBy, orderByType, beginCount, selectCount, gc_id, keyword,
gb_id, queryType);
mAdapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();
actualListView.setSelection(1);
}

}

private void setNowOrderBy(View v) {
// TODO Auto-generated method stub
if (temp != null) {

for (int i = 0; i < temp.getChildCount(); i++) {
View tv = temp.getChildAt(i);
if (tv instanceof TextView) {
((TextView) tv).setTextColor(homeActivity.getResources()
.getColor(R.color.textlight));
}
}
}

RelativeLayout parent = (RelativeLayout) v;
for (int i = 0; i < parent.getChildCount(); i++) {
View tv = parent.getChildAt(i);
if (tv instanceof TextView) {
((TextView) tv).setTextColor(homeActivity.getResources()
.getColor(R.color.red));
}
}
temp = parent;

}
/**
     * 
     * @param nowTime
     * @param beginTime
     * @param endTime
     * @return [0] hour [1] minutes [2] second
     */
    private int[] initTime(long nowTime, long beginTime, long endTime) {
        long fromBeginTime=0,fromEndTime=0;
      if(beginTime-nowTime<0){
          fromEndTime = endTime - nowTime;
         }else {
          fromBeginTime = beginTime -nowTime;
         }
         double s = fromBeginTime/1000;
         System.out.println(s);
         int hh = (int) (((s/60))/60);
         int mm = (int) (((s/60)%60));
         int ss = (int)s%60%60; 
return new int[]{hh,mm,ss};
}
    /**
     *  计时
     * @param hour
     * @param minute
     * @param second
     * @return 0 hour 1 minute 2 second
     */
    private int[] timerImpl(String hour, String minute, String second) {
     int seconds=0,minutes=0,hours=0;
if(second!=null){
 seconds = Integer.parseInt(second);
}
if(minute!=null){
 minutes = Integer.parseInt(minute);
}
if(hour!=null){
 hours = Integer.parseInt(hour);
}
if(seconds==0&&minutes!=0){
seconds = 59;
minutes--;
}else if(hours!=0||minutes!=0||seconds>0){
seconds--;
}
if(minutes==0&&seconds==0&&hours!=0){
seconds = 59;
minutes = 59;
hours--;
}
if(hours==0&&minutes==0&&seconds==0){
hours =0;
minutes =0;
seconds = 0;
cancelTimer();
}
return new int[]{hours,minutes,seconds};
};
/**
     *  计时器开启
     */
    private void startTimer() {
}
    /**
     * 关闭定时器
     */
    public  void cancelTimer(){
     timer.cancel();
    }
    private void initView() {
hh = (TextView)rootView.findViewById(R.id.second_kill_time_hh);
mm = (TextView)rootView.findViewById(R.id.second_kill_time_mm);
ss = (TextView)rootView.findViewById(R.id.second_kill_time_ss);
}
}