请求网络数据,解析JSON,显示在listview上(采用thread,handler)

请求网络数据,解析JSON,显示在listview上(采用thread,handler,message)实现。
首先我们应该要之道,thread,handler,message,looper的关系。好吧,这个我就不多说了,不懂的百度下吧。。
首先我们开启一个线程。
new Thread(new FootUpDateExam(footHandler, 0x04)).start();传如handler,和what

class FootUpDateExam implements Runnable {
  Handler handler;
  int what;
  public FootUpDateExam(Handler handler, int what) {
   this.handler = handler;
   this.what = what;
  }
  @Override
  public void run() {
   synchronized (this) {
    List<Exam> newExams = examDao.getExamByThirdCateIdforPage(   //查询本地数据库,如果本地有数据就查询本地数据 0x03为本地数据
      cateId, 3, pageId);
    pageId++;
    if (newExams.size() == 10) {
     for (Exam exam : newExams) {
      if (exams.contains(exam)) {
       continue;
      }
      exams.add(exam);
     }
     handler.sendEmptyMessage(0x03); // 更新本地
     // handler.sendEmptyMessage(0x03); // 更新本地   发送一个message
    } else {
     addExamFromWeb(handler, what);     //这里是:如果本地没有数据就请求网络数据
    }
   }
  }
}


private void addExamFromWeb(Handler handler, int what) {
  String strSId = "";
  String strTid = "";
  if (sId != -1) {
   strSId = sId + "";
  }
  if (cateId != -1) {
   strTid = cateId + "";
  }
  String url = PubCon.sxbGetExamListPort + "?sid=" + strSId + "&tid="    //这里是我要组接的URL,
    + strTid + "&page=" + pageId + "&type=3";
  Log.v("tag", url);
  System.out.println("url" + url);
  httpUtil.getHtmlByThread(url, "UTF-8", handler, what);     //这里面是封装好的里面会返回一个handler.sendEmptyMessage(0x04);   0x04为请求网络数据
}

这里你如果不用组接RUL,就直接给你的链接就好了。

然后外面再来看看handler
private void BinderHandler() {
  footHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
    super.handleMessage(msg);
    switch (msg.what) {
    case 0x03:
     // 本地更新
     examAdapter.notifyDataSetChanged();
     break;
    case 0x04:
     if (msg.obj == null) {
      if (connCount == 2) {
       DialogTool.showToash(ExamForecastListActivity.this
         .getApplicationContext(), "网络不稳定请检查网络 ",
         1000);
       connCount = 0;
       examAdapter.notifyDataSetChanged();
      } else {
       connCount++;
       new Thread(new FootUpDateExam(footHandler, 0x04))
         .start();
       examAdapter.notifyDataSetChanged();
      }
      return;
     }
     jsonStr = msg.obj.toString();
     if (jsonStr.length() > 10) {
      JSONTokener jsonParser = new JSONTokener(jsonStr);
      try {
       JSONObject jsObj = (JSONObject) jsonParser
         .nextValue();
       exams.addAll(examDao.getExamFromJson(cateId, jsObj,    //这里是JSON数据的解析。
         3));
       examAdapter.notifyDataSetChanged();
       // lloutProgBar.setVisibility(View.GONE);
       // Log.v("TAG", jsObj);
       System.out.println("TAG" + jsObj);
       System.out.println("examsSize:" + exams.size());
       // if
      } catch (JSONException e) {
       e.printStackTrace();
      }
     } else {
      DialogTool.showToash(ExamForecastListActivity.this
        .getApplicationContext(), "该页面无内容", 3000);
      footerView.setVisibility(View.INVISIBLE);
      // examAdapter.notifyDataSetChanged();
     }
     if (lloutProgBar.getVisibility() == View.VISIBLE) { // 刷新
      lloutProgBar.setVisibility(View.GONE);
      lv_exam.setVisibility(View.VISIBLE);
     }
     connCount = 0;
     // examAdapter.notifyDataSetChanged();
     lv_exam.setSelection(lastSelect);
     footerView.setVisibility(View.VISIBLE);
     break;
    }
    examAdapter.notifyDataSetChanged();
    flashBar.setVisibility(View.GONE);
    tv_showMore.setText("查看更多");
   }
  };
}
最后就是适配了
mylistView.setAdapter(new MyListAdapter(this , listExper));
额,总感觉好马虎,但好像也只能也到这种地步了。。。唉。。见谅。。加油,亲们。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值