目前碰到一个HttpPost请求的问题,代码如下@Override
public void onClick(View v) {
NameValuePair nameValuePair1 = new BasicNameValuePair("name", "zhangsan");
NameValuePair nameValuePair2 = new BasicNameValuePair("age", "18");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(nameValuePair1);
nameValuePairs.add(nameValuePair2);
try {
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
HttpPost httpPost = new HttpPost("http://www.*.cn/test.aspx");
httpPost.setEntity(requestHttpEntity);
HttpClient httpClient = new DefaultHttpClient();
//使用Http客户端发送请求对象
try {
System.out.println("1111111111111");
httpResponse = httpClient.execute(httpPost);
System.out.println("2222222222222");
httpEntity = httpResponse.getEntity();
System.out.println("33333333333333");
System.out.println(EntityUtils.toString(httpResponse.getEntity()));
System.out.println("44444444444444");
} catch (Exception e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}经过测试
----------------
在Android2.3、模拟器及手机上没出现问题,是可以正常输出的
----------------
在android2.2手机及模拟器,android2.1模拟器上运行到
System.out.println(EntityUtils.toString(httpResponse.getEntity()));
就卡不会立即运行了,等待很久.偶尔弹出提示应用程序无响应的提示,偶尔也会输出“44444444444444”,但System.out.println(EntityUtils.toString(httpResponse.getEntity()));内容始终输不出来,正常情况下是会有响应内容的。因此又在android2.2手机及模拟器,android2.1模拟器上做了几个测试
测试一:
如果把http://www.*.cn/test.aspx改成http://www.baidu.com,是可以正常运行的
测试二:
如果把httpPost.setEntity(requestHttpEntity); 这行注释掉,还是请求代码里的URL,也就是post请求不带请求参数,也是可以正常运行的。
请各位指点!
public void onClick(View v) {
NameValuePair nameValuePair1 = new BasicNameValuePair("name", "zhangsan");
NameValuePair nameValuePair2 = new BasicNameValuePair("age", "18");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(nameValuePair1);
nameValuePairs.add(nameValuePair2);
try {
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
HttpPost httpPost = new HttpPost("http://www.*.cn/test.aspx");
httpPost.setEntity(requestHttpEntity);
HttpClient httpClient = new DefaultHttpClient();
//使用Http客户端发送请求对象
try {
System.out.println("1111111111111");
httpResponse = httpClient.execute(httpPost);
System.out.println("2222222222222");
httpEntity = httpResponse.getEntity();
System.out.println("33333333333333");
System.out.println(EntityUtils.toString(httpResponse.getEntity()));
System.out.println("44444444444444");
} catch (Exception e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}经过测试
----------------
在Android2.3、模拟器及手机上没出现问题,是可以正常输出的
----------------
在android2.2手机及模拟器,android2.1模拟器上运行到
System.out.println(EntityUtils.toString(httpResponse.getEntity()));
就卡不会立即运行了,等待很久.偶尔弹出提示应用程序无响应的提示,偶尔也会输出“44444444444444”,但System.out.println(EntityUtils.toString(httpResponse.getEntity()));内容始终输不出来,正常情况下是会有响应内容的。因此又在android2.2手机及模拟器,android2.1模拟器上做了几个测试
测试一:
如果把http://www.*.cn/test.aspx改成http://www.baidu.com,是可以正常运行的
测试二:
如果把httpPost.setEntity(requestHttpEntity); 这行注释掉,还是请求代码里的URL,也就是post请求不带请求参数,也是可以正常运行的。
请各位指点!
解决方案 »
- 绝对定位下ImageView重绘Bitmap的问题
- 问个在Android下动态布局的问题!
- Android 系统横竖屏(屏幕旋转)代码如何实现?
- 怎么把JSON Object放到另一个JSON Object里面去?
- VIEW 在移动时,能否带出阴影?
- expandablelistview嵌套 gridview 数据错乱
- 新建的app在清理后台时app没有调用onDestroy()方法,why?
- 请问,想让Activity和Service能够同时访问一个数据库,该如何实现
- 安卓虚拟机sdcard里存储了文件,但是虚拟机列表没有更新
- 大佬们,现在安卓端和Web服务器端是怎样交互的?
- android 源代码make -j4
- 黑屏时监听音量键
System.out.println(EntityUtils.toString(httpEntity));试试
public class ConnectionManager{
private Context context; public ConnectionManager(Context ctx){
this.context = ctx;
} public boolean networkInfo(){
ConnectivityManager connMgr = (ConnectivityManager)this.context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
return true;
} else {
return false;
}
} public void showAlert(String title,String message){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this.context); // set title
alertDialogBuilder.setTitle(title); // set dialog message
alertDialogBuilder
.setMessage(message)
.setCancelable(false)
.setNegativeButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
}); // create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create(); // show it
alertDialog.show(); }
public String execute_get(String url) {
// TODO Auto-generated method stub
HttpResponse response = null;
String str_response = ""; if(networkInfo()){
DefaultHttpClient httpsClient = getHTTPSClient(); try {
HttpGet httpget = new HttpGet(url);
response = httpsClient.execute(httpget);
if (response != null) {
str_response = EntityUtils.toString(response.getEntity());
Log.d("Connection Manager","Response: "+str_response);
}
}catch(Exception e){
e.printStackTrace();
}
}else{
showAlert("Connection Error","Please connect to wifi/3g to continue");
} return str_response;
} public DefaultHttpClient getHTTPSClient() {
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); HttpParams params = new BasicHttpParams();
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
DefaultHttpClient httpsClient= new DefaultHttpClient(cm, params);
return httpsClient;
} public String execute_post(String url,String request){
HttpResponse response = null;
String str_response = "";
if(networkInfo()){
DefaultHttpClient httpsClient = getHTTPSClient(); try {
HttpPost httppost = new HttpPost(url); List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("jsonData", request));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpsClient.execute(httppost); if (response != null) {
str_response = EntityUtils.toString(response.getEntity());
Log.d("ConnectionManager", "Response: "+str_response);
}
}catch(Exception e){
e.printStackTrace();
}
}else{
showAlert("Connection Error","Please connect to wifi/3g to continue");
}
return str_response;
}
}
// Use the above like this new Thread() {
@Override
public void run() {
try {
String input = "Your post data"
Log.d("POSTDATA",input);
String response = execute_post(URLS.LOGIN_AUTH,input); Message responseMsg = new Message();
Bundle b = new Bundle();
b.putString("response", response);
responseMsg.setData(b); handler.sendMessage(responseMsg);
}catch(Exception e){ }
}
}.start();
目前确实用的子线程在走 new Thread(){
public void run() {具体代码实现。