android.os.NetworkOnMainThreadException

android.os.NetworkOnMainThreadException

在Android 4.0以上,网络连接不能放在主线程上,不然就会报错android.os.NetworkOnMainThreadException。但是4.0下版本可以不会报错。

在Android4.0以后,会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为Android在4.0以后为了防止应用的ANR(Aplication Not Response)异常,Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。

解决方案:
开放一个子线程

Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                // Department
                case 1:
                    try {
                        //JSONArray array = new JSONArray(json);
                        ///Province = new String[array.length()];
                        //ProvinceCode = new String[array.length()];
                        //for (int i = 0; i < array.length(); i++) {
                         //   JSONObject obj = (JSONObject) array.get(i);
                         //   Province[i] = obj.getString("id");
                         //   ProvinceCode[i] = obj.getString("name");
                        //}
                        sp_depart = (Spinner) findViewById(R.id.sp_department);
                        // 初始化下拉列表加载数据适配器
                        ArrayAdapter<KeyValueInfo> adapter = new ArrayAdapter<KeyValueInfo>(
                                MainActivity.this,
                                android.R.layout.simple_spinner_dropdown_item, dataDepartList);
                        // 设置下拉列表的样式,下为设置为简单样式
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        // 将数据加载进下拉列表当中
                        sp_depart.setAdapter(adapter);
                        // 添加事件Spinner事件监听,当点击下拉列表中的某一选项之后触发该事件


                        sp_depart.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//选择item的选择点击监听事件
                            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                                       int arg2, long arg3) {
                                // TODO Auto-generated method stub
                                // 将所选mySpinner 的值带入myTextView 中
                                //myTextView.setText("您选择的是:" + adapter.getItem(arg2));//文本说明

                                //Toast.makeText(getApplicationContext(),dataAssetGroupList.get(arg2).getKey(),Toast.LENGTH_LONG).show();

                                String tempString = dataDepartList.get(arg2).getKey();
                                if (tempString != "0")
                                    did = tempString;
                                else
                                    did = "";

                                searchData();
                            }

                            public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub
                                //myTextView.setText("Nothing");
                            }
                        });

                        //((KeyValueInfo) (spinnera.getSelectedItem())).getValue()可取值
                        // 设置默认值
                        sp_depart.setVisibility(View.VISIBLE);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
                // AssetGroup
                case 2:
                    try {

                        sp_assetgroup = (Spinner) findViewById(R.id.sp_assetgroup);
                        // 初始化下拉列表加载数据适配器
                        ArrayAdapter<KeyValueInfo> adapter = new ArrayAdapter<KeyValueInfo>(
                                MainActivity.this,
                                android.R.layout.simple_spinner_dropdown_item, dataAssetGroupList);
                        // 设置下拉列表的样式,下为设置为简单样式
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        // 将数据加载进下拉列表当中
                        sp_assetgroup.setAdapter(adapter);
                        // 添加事件Spinner事件监听,当点击下拉列表中的某一选项之后触发该事件
                        //spinner.setOnItemSelectedListener(new SpinnerSelectedListener());

                        sp_assetgroup.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//选择item的选择点击监听事件
                            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                                       int arg2, long arg3) {
                                // TODO Auto-generated method stub
                                // 将所选mySpinner 的值带入myTextView 中
                                //myTextView.setText("您选择的是:" + adapter.getItem(arg2));//文本说明

                                //Toast.makeText(getApplicationContext(),dataAssetGroupList.get(arg2).getKey(),Toast.LENGTH_LONG).show();

                                String tempString = dataAssetGroupList.get(arg2).getKey();
                                if (tempString != "0")
                                    agid = tempString;
                                else
                                    agid = "";

                                searchData();
                            }

                            public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub
                                //myTextView.setText("Nothing");
                            }
                        });

                        //((KeyValueInfo) (spinnera.getSelectedItem())).getValue()可取值
                        // 设置默认值
                        sp_assetgroup.setVisibility(View.VISIBLE);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
                // 县
                case 3:
                    // Asset
                    try {

                        lv_assets = (ListView) findViewById(R.id.lv_asset);
                        // 初始化下拉列表加载数据适配器
                        MyAdapter myAdapter = new MyAdapter(list, MainActivity.this);

                        // 将数据加载
                        lv_assets.setAdapter(myAdapter);

                        tv_count.setText(list.size() + " asset from 35");


                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;


                default:
                    break;
            }
            super.handleMessage(msg);
        }
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值