安卓4.0版本以上不允许在主线程中进行网络请求,如果在主线程进行网络请求,会造成页面假死,甚至程序异常。
因此需要开一个新线程来进行网络请求
Message mMessage;
HttpClient httpClient;
/*开一个新线程*/
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
/*在这里面的代码都是在新线程中运行*/
HttpPost post = new HttpPost(
"http://178.xicp.net/ssApp/login");
/*这是一个post请求,首先把参数放到params中*/
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("pwd", pass));
try {
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse response = httpClient.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {
//SaveCookies(response);保存cookie
String msg = EntityUtils.toString(response.getEntity());//返回结果
mMessage = mHandler.obtainMessage();
mMessage.what = 1;
mMessage.obj = msg;
}
} catch (Exception e) {
e.printStackTrace();
mMessage.what = 0;
}
}
}).start();
Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
if (msg.what == 1) {//如果返回1
String msgx = (String) msg.obj;//获取返回的字符串
/*处理字符串*/
} else {//返回其它状态,网络请求失败
}
return true;
}
});