android4.0 HttpClient 以后不能在主线程发起网络请求

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 + "\n");
					indexAdd1 = strBuff.indexOf("addr", indexAdd4);
					Log.e(TAG, "addr=" + addr + "\nname=" + 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, "不能读取到网络信息!");
            }
        }

    };

 

转载于:https://www.cnblogs.com/zhujiabin/p/4744144.html

你可能感兴趣的:(android4.0 HttpClient 以后不能在主线程发起网络请求)