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 = ;
// 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, "不能读取到网络信息!");
}
} };

android4.0 HttpClient 以后不能在主线程发起网络请求的更多相关文章

  1. Android4.0 以后不允许在主线程进行网络连接

    Android4.0 以后不允许在主线程进行网络连接,否则会出现 android.os.NetworkOnMainThreadException.因此,必须另起一个线程进行网络连接方面的操作. pac ...

  2. 一个App带你学会Retrofit2.0,麻麻再也不用担心我的网络请求了!

    Retrofit.Retrofit.Retrofit,越来越多的人在玩这个网络请求框架,这个由squareup公司开源的网络请求框架确实挺好用,今天我们就来看一下这个东东怎么玩! Retrofit作为 ...

  3. android.os.NetworkOnMainThreadException 在4.0之后谷歌强制要求连接网络不能在主线程进行访问

    谷歌在4.0系统以后就禁止在主线程中进行网络访问了,原因是: 主线程是负责UI的响应,如果在主线程进行网络访问,超过5秒的话就会引发强制关闭, 所以这种耗时的操作不能放在主线程里.放在子线程里,而子线 ...

  4. android4.0访问不能网络解决方法

    @SuppressLint("NewApi")protected void onCreate(Bundle savedInstanceState) {StrictMode.setT ...

  5. (转)electron主线程中通过mainWindow.webContents.send发送事件,渲染线程接收不到

    转自 https://segmentfault.com/q/1010000015599245/ 准备实现的功能: 页面1(渲染进程1)中点击按钮,发送事件给到主进程.主进程成功接收事件后,通过main ...

  6. android4.0以上访问网络不能在主线程中进行以及在线程中操作UI的解决方法

    MONO 调用一个线程操作UI 然后报Only the original thread that created a view hierarchy can touch its views.错误 goo ...

  7. Android4.0 主线程不能访问网络异常解决办法

    从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会 ...

  8. android 4.0主线程訪问网络问题

    在4.0下面,在主线程中訪问网络,假设请求超过6s的话,就会报ANR,那么这就会带来一个问题,假设网络慢或者请求的数据过大时,界面会卡顿,造成界面灵敏性非常差,因此网络请求一般不能放在主线程中操作,g ...

  9. 解决Android3.0之后不能在主线程中进行HTTP请求

    感谢大佬:https://www.cnblogs.com/falzy/p/5763848.html 在Android3.0以后,会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时 ...

随机推荐

  1. PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别

    一.echoecho() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如果您希望向 echo() 传递一个以上的参数,那么使用括号会发生解析错误.而且echo是返回void的,并不 ...

  2. Binary Numbers(HDU1390)

    Binary Numbers 点我 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. 定制化Azure站点Java运行环境(3)

    定制化Azure Website提供的默认的Tomcat和JDK环境 在我们之前的测试中,如果你访问你的WEB站点URL时不加任何上下文,实际上你看到的web界面是系统自带的测试页面index.jsp ...

  4. pycares cffi

    pypy 5.0.1 由于 cpyext 有 bug,用不了异步 DNS 解析库 pycares .花了一周时间,对照着 pycares 的 C 代码自己重写了个 cffi 的实现.在 windows ...

  5. hdu 1010 Tempter of the Bone(dfs暴力)

    Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...

  6. Android项目 手机安全卫士(代码最全,注释最详细)之十二 设置中心的界面

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...

  7. Android(一)

    Android Activity TextView,Button 1.在fragment_main.xml文件中直接添加控件 2.在MainActivity.java文件中添加TextView控件 在 ...

  8. 【枚举+贪心】【TOJ3981】【ICPC Balloons】

    给你N种不同颜色气球,每种气球有个数目 count[i],给的同种颜色气球可能是L尺寸,或M尺寸. M个问题,每个问题有个解决人数ac[i]. 每个问题 要分配一种颜色的气球,尺寸要一样 现在 这些气 ...

  9. WisDom .net 工作流设计流程

    1.简单说明       工作流( Foundare WorkFlow)说白了就是工作流程的一些计算机模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计 ...

  10. chrome调试工具常用功能整理(转)

    Elements chrome devtools 中 Elements panel 是审查 dom 元素和 css 的, 可以实时修改 dom/css. windows: ctrl + shift + ...