为了账号安全,请及时绑定邮箱和手机立即绑定

android为什么runOnUiThread无法得到执行

android为什么runOnUiThread无法得到执行

public class ChooseAreaFragment extends Fragment {    public static final int LEVEL_PROVINCE=0;    public static final int LEVEL_CITY=1;    public static final int LEVEL_COUNTY=2;    private ProgressDialog progressDialog;    private TextView titleText;    private Button back_btn;    private ListView listView;    private ArrayAdapter<String> adapter;    private List<String>  dataList =new ArrayList<>();    //省列表    private List<Province> provinceList;    //市列表    private  List<City> cityList;    //县列表    private List<County> countyList;    //被选中的省份    private  Province selectedProvince;    //被选中的城市    private  City selectedCity;    //当前选中的级别    private  int currentLevel;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        View view =inflater.inflate(R.layout.choose_area,container,false);        titleText =(TextView)view.findViewById(R.id.title_text);        back_btn=(Button)view.findViewById(R.id.back_button);        listView=(ListView)view.findViewById(R.id.list_view);        adapter=new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1,dataList);        listView.setAdapter(adapter);        return view;    }    @Override    public void onActivityCreated( Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if(currentLevel == LEVEL_PROVINCE){                    selectedProvince=provinceList.get(position);                    queryCities();                }else if (currentLevel==LEVEL_CITY){                    selectedCity=cityList.get(position);                    queryCounties();                }            }        });        back_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(currentLevel==LEVEL_COUNTY){                    queryCities();                }else if (currentLevel==LEVEL_CITY){                    queryProvinces();                }            }        });        queryProvinces();    }    /**     * 查询全国所有省,优先从数据库查询,如果没有查询到在从服务器查询     */ private void queryProvinces(){     titleText.setText("中国");     back_btn.setVisibility(View.GONE);     //查询Province类中的所有数据     provinceList = DataSupport.findAll(Province.class);     if(provinceList.size()>0){         dataList.clear();         for (Province province : provinceList){             dataList.add(province.getProvinceName());         }         adapter.notifyDataSetChanged();         listView.setSelection(0);         currentLevel=LEVEL_PROVINCE;     }else {         String address = "http://guolin.tech/api/china";         Log.e("queryProvinces",address);          queryFromServer(address,"province");     } }    /**     * 根据传入的地址和类型从服务器获取数据     * @param address     * @param type     */    private void queryFromServer(String address,final String type) {        showProgressDialog();        HttpUtil.sendOKHttpRequest(address, new Callback() {            @Override            public void onResponse(Call call, Response response) throws IOException {                    String responseText = response.body().string();                 boolean result =false ;                if ("province".equals(type)){                    result = Utility.handleProvinceResponse(responseText);                }else if ("city".equals(type)){                    result = Utility.handleCityResponse(responseText,                            selectedProvince.getId());                }else if ("county".equals(type)){                    result = Utility.handleCountyResponse(responseText,selectedCity.getId());                }if (result){                    getActivity().runOnUiThread(new Runnable() {                        @Override                        public void run() {                            closeProgressDialog();                            if("province".equals(type)){                                queryProvinces();                            }else if("city".equals(type)){                                queryCities();                            }else if ("county".equals(type)){                                queryCounties();                            }                        }                    });                }            }            @Override            public void onFailure(Call call, IOException e) {              getActivity().runOnUiThread(new Runnable() {                  @Override                  public void run() {                      closeProgressDialog();                      Toast.makeText(getContext(), "加载失败", Toast.LENGTH_SHORT).show();                  }              });            }        });    }    private void closeProgressDialog() {        if(progressDialog!=null){            progressDialog.dismiss();        }    }    private void showProgressDialog() {        if(progressDialog==null){            progressDialog =new ProgressDialog(getActivity());            progressDialog.setMessage("正在加载中");            progressDialog.setCanceledOnTouchOutside(false);        }        progressDialog.show();    }    /**     * 查询所有县     */    private void queryCounties() {        titleText.setText(selectedCity.getCityName());        back_btn.setVisibility(View.VISIBLE);        countyList=DataSupport.where("cityid+?",String.valueOf(selectedCity.getId()))                .find(County.class);        if(countyList.size()>0){            dataList.clear();            for (County county : countyList){                dataList.add(county.getCountyName());            }            adapter.notifyDataSetChanged();            listView.setSelection(0);            currentLevel=LEVEL_CITY;        }else {            int provinceCode = selectedProvince.getProvinceCode();            int cityCode = selectedCity.getCityCode();            String address = "http://guolin.tech/api/china/"+provinceCode+"/"+cityCode;            queryFromServer(address,"county");        }    }    /**     * 查询选中省内的所有的城市,优先查询数据库     */    private void queryCities() {        titleText.setText(selectedProvince.getProvinceName());        back_btn.setVisibility(View.VISIBLE);        cityList = DataSupport.where("provinceid=?",String.valueOf(selectedProvince.getId()))                .find(City.class);        if(cityList.size()>0){            dataList.clear();            for(City city :cityList){                dataList.add(city.getCityName());            }            //用于刷新listView的界面            adapter.notifyDataSetChanged();            listView.setSelection(0);            currentLevel=LEVEL_CITY;        }else {            int provinceCode = selectedProvince .getProvinceCode();            String address = "http://guolin.tech/api/china/"+provinceCode;            queryFromServer(address,"city");        }    }}-----------以上黑色部分 我经过调试 发现没有执行到这个ui线程里面的代码,导致程序一直卡在progressDialog中(如图)在调试中,json数据已经都加载进来了 偏偏runOnUiThread中的代码不会执行,菜鸟虚心求大神指点
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 3605 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信