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);
}
};