Only the original thread that created a view hierarchy can t

今天实际项目中遇到了这个问题,感觉自己代码真的一点问题都没有,从网上查了一下资料,基本上都是说不能把耗时的任务放在主线程,可是博主真的没有把耗时的任务放在主线程,好了废话不多说,先上代码,,根据代码说问题:

@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); mDialog = ProgressDialog.show(getActivity(), "下载文件", "正在下载……"); Thread loadThread = new Thread(new LoadThread()); loadThread.start(); } class LoadThread implements Runnable { @Override public void run() { initData(); } }

private void initData() { HttpClient httpClient = new DefaultHttpClient(); HttpGet request; try { request = new HttpGet(new URI(FOSHIFUWU_API)); HttpResponse response = httpClient.execute(request); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); if (entity != null) { String out = EntityUtils.toString(entity, "UTF-8");

buddhistServicesBeans.add(new BuddhistServicesBean(title, des, money, unitId, endDate));// 博主刚开始把这个代码放在了这个子线程,而不是UI线程// buddhistServicesAdapter = new BuddhistServicesAdapter(getActivity(), buddhistServicesBeans);// buddhistservices_listview.setAdapter(buddhistServicesAdapter); } isNet = true; } catch (JSONException e) { e.printStackTrace(); } } } else { isNet = false; } } catch (URISyntaxException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Message msg = Message.obtain(); if (isNet) { msg.what = 0; handler.sendMessage(msg); } else { msg.what = 1; handler.sendMessage(msg); } }

Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: mDialog.cancel();// 后来博主把这个放在了处理UI线程进行处理 buddhistServicesAdapter = new BuddhistServicesAdapter(getActivity(), buddhistServicesBeans); buddhistservices_listview.setAdapter(buddhistServicesAdapter); buddhistservices_listview.setOnItemClickListener(new bsInfoOnItemClickListener()); break; case 1: break; } } };

把你的脸迎向阳光,那就不会有阴影

Only the original thread that created a view hierarchy can t

相关文章:

你感兴趣的文章:

标签云: