android4.0 HttpClient 以后不能在主线程发起网络请求
来源:互联网 发布:python服务器脚本 编辑:程序博客网 时间:2024/06/15 20:19
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, "不能读取到网络信息!");
}
}
};
0 0
- android4.0 HttpClient 以后不能在主线程发起网络请求
- Android4.0以后不能在主线程访问网络的解决
- Android4.0以后不能在主线程访问网络的解决
- Android4.0 以后不允许在主线程进行网络连接
- Android4.0 以后不允许在主线程进行网络连接
- Android4.0 以后不允许在主线程进行网络连接
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求
- HTTP请求出错(no resource): Android4.0不能在主线程中进行HTTP请求
- Android4.0不能在主线程中进行HTTP请求解决办法 1
- 关于android4.0中访问网络不能在主线程中进行以及Handler的使用
- 关于android4.0中访问网络不能在主线程中进行以及Handler的使用
- android网络请求不能放在主线程
- Android 4.0以后不能在主线程能进行网络访问
- 在主线程中不能连接网络
- 删除文件中以xxx开头的行
- Hadoop 格式化namenode错误:FATAL namenode.NameNode: Exception innamenode join
- memcached的安装
- 那些年遇见的最逗得老师
- 自动滑动的Scrollview
- android4.0 HttpClient 以后不能在主线程发起网络请求
- 什么叫三次握手?什么叫四次断开?
- php【基础学习二】File
- bzoj 3223 Tyvj 1729 文艺平衡树 Splay
- android vebview与js交互 webview与网页交互
- Linux下apache tomcat集群搭建
- otter功能初级使用
- js 获取浏览器高度和宽度值(多浏览器)
- KVC