android4.0以后不能在主线程发起网络请求,该异步网络请求。
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub gethttp(); } }).start(); //这段代码在主线程中调用,开启一个线程
public void gethttp() { String addr = "", name = ""; StringBuilder stringBuilder = new StringBuilder(); String urlString = ""; if (chkbd.isChecked() == true) { urlString = String .format("http://api.map.baidu.com/geocoder/v2/?ak=bjj7HFkUUoHs07rnVNM07TQg&coordtype=" + "bd09ll" + "&callback=renderReverse&location=" + latlng[0] + "," + latlng[1] + "&output=json&pois=1"); } else { urlString = String .format("http://api.map.baidu.com/geocoder/v2/?ak=bjj7HFkUUoHs07rnVNM07TQg&coordtype=" + "wgs84ll" + "&callback=renderReverse&location=" + latlng[0] + "," + latlng[1] + "&output=json&pois=1"); } Log.i(TAG, "latitude:" + latlng[0] + " longitude:" + latlng[1]); /** 这里采用get方法,直接将参数加到URL上 */ Log.i(TAG, urlString); /** 新建HttpClient */ HttpClient client = new DefaultHttpClient(); /** 采用GET方法 */ HttpGet get = new HttpGet(urlString); try { /** 发起GET请求并获得返回数据 */ Log.i(TAG, "发起GET请求并获得返回数据"); Log.e(TAG, "ces1"); HttpResponse response = client.execute(get); int code = response.getStatusLine().getStatusCode();// 返回响应码 Log.e(TAG, "响应码code=" + code); HttpEntity entity = response.getEntity(); BufferedReader buffReader = new BufferedReader( new InputStreamReader(entity.getContent())); StringBuffer strBuff = new StringBuffer(); String result = null; while ((result = buffReader.readLine()) != null) { strBuff.append(result); } /** 解析JSON数据,获得物理地址 */ // Log.i(TAG, "解析JSON数据,获得物理地址"+strBuff+" oo"); int indexAdd1 = 0, indexAdd2 = 0, indexAdd3 = 0, indexAdd4 = 0; indexAdd1 = strBuff.indexOf("status", 1); Log.i(TAG, "indexAdd1=" + indexAdd1); String status = strBuff.substring(indexAdd1 + 8, indexAdd1 + 9); Log.i(TAG, "status=" + status); if (strBuff != null && strBuff.length() > 0 && status.equals("0")) { indexAdd1 = strBuff.indexOf("formatted_address", 1); indexAdd2 = strBuff.indexOf("pois", indexAdd2); indexAdd1 = strBuff.indexOf("addr", indexAdd2); while (indexAdd1 > 1) { Log.i(TAG, "indexAdd1=" + indexAdd1 + " indexAdd2=" + indexAdd2); indexAdd2 = strBuff.indexOf("cp", indexAdd1); addr = strBuff.substring(indexAdd1 + "addr".length() + 3, indexAdd2 - 3); stringBuilder.append("地址:" + addr); indexAdd3 = strBuff.indexOf("name", indexAdd2); indexAdd4 = strBuff.indexOf("poiType", indexAdd3); name = strBuff.substring(indexAdd3 + "addr".length() + 3, indexAdd4 - 3); stringBuilder.append(" 名称:" + name + " "); indexAdd1 = strBuff.indexOf("addr", indexAdd4); Log.e(TAG, "addr=" + addr + " name=" + name); } ; } else if (status.equals("1")) { stringBuilder.append("百度服务器错误"); } else if (status.equals("21")) { stringBuilder.append("from非法"); } else if (status.equals("22")) { stringBuilder.append("to非法"); } else { stringBuilder.append("coords非法"); } } catch (Exception e) { Log.i(TAG, "获取物理位置出现错误" + e.getMessage()); } finally { get.abort(); // stringBuilder=null; client = null; } Log.i(TAG, "JSON:" + stringBuilder.toString());
// 1、实例化一个Message对象 Message message = Message.obtain(); // 将图片流赋值给Message对象 message.obj = stringBuilder.toString(); // 定义标签 message.what = 0; // 3、发送消息到主线程中的Handler mHandler.sendMessage(message); } // 2、在主线程中实例化Handler对象 Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); // 4、接收消息并执行UI的更新操作 if (msg.obj != null) { showText.setText((String) msg.obj); } else { Log.i(TAG, "不能读取到网络信息!"); } } };