zoukankan      html  css  js  c++  java
  • 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 + "
    ");
    					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, "不能读取到网络信息!");
                }
            }
    
        };
  • 相关阅读:
    在页面跳转的时候,在跳转后的页面中使用js 获取到 页面跳转的url中携带的参数。
    使用js处理后台返回的Date类型的数据
    java后端时间处理工具类,返回 "XXX 前" 的字符串
    前端分页神器,jquery grid的使用(前后端联调),让分页变得更简单。
    后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用
    使用SSM 或者 springboot +mybatis时,对数据库的认证信息(用户名,密码)进行加密。
    swagger2 常用注解的使用
    SSM项目 以及 springboot 中引入swagger2的方法
    jquery grid 获取选中的行的数据,以及获取所有行的方法
    关于使用ssm与spring时,配置tomcat 虚拟目录( doBase )中的一些坑
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4744144.html
Copyright © 2011-2022 走看看