作者也一直遇到这个问题,很奇怪,用wifi连接,没有问题,关闭wifi或者不在wifi区域,就无法连接我的服务器。
读者可先看这篇文章 http://blog.csdn.net/dropWater_yjqbll/archive/2010/12/16/6079531.aspx
无法连接的主要原因是我们的手机都是通过移动或者联通代理出去的请求,所以无法直接发送出去。
自己写了类如下:
public static String request(int netType, String host, String url,
int method, List<NameValuePair> pamrams) {
if(netType==HttpUtil.WAP_INT){ //wap上网
HttpRequestBase request = null;
String strReust = null;
try { //wap
//截取 http://klmu.v228.10000net.cn/publicbicycle 为 klmu.v228.10000net.cn
HttpHost target = new HttpHost(getHostStr(host),Integer.parseInt(getPort(host)));
if (method == 0) {
request = new HttpPost(getUrl(host,url));
if (pamrams != null) {
((HttpPost) request).setEntity(new UrlEncodedFormEntity(
pamrams, HTTP.UTF_8));
}
} else if (method == 1) {
request = new HttpGet(url);
}
//新建HttpClient对象
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpHost proxy = new HttpHost("10.0.0.172", 80);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
proxy);
HttpResponse httpResponse = httpClient.execute(target, request);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
strReust = EntityUtils.toString(httpResponse.getEntity());
} else {
strReust = HTTPERROR_Start + " 服务器httpCode: "+ httpResponse.getStatusLine().getStatusCode() + HTTPERROR_END;
}
httpClient.getConnectionManager().shutdown();
} catch (Exception e) {
strReust = HTTPERROR_Start + e.getMessage() + HTTPERROR_END;
}
return strReust;
} else if(netType==HttpUtil.WIFI_INT){ //wifi
url = host+url;
HttpRequestBase request = null;
String strReust = null;
try {
if (method == 0) {
request = new HttpPost(url);
if (pamrams != null) {
((HttpPost) request).setEntity(new UrlEncodedFormEntity(
pamrams, HTTP.UTF_8));
}
} else if (method == 1) {
request = new HttpGet(url);
}
// 设置连接超时时间和数据读取超时时间
// HttpParams httpParams = new BasicHttpParams();
// HttpConnectionParams.setConnectionTimeout(httpParams, 500);
// HttpConnectionParams.setSoTimeout(httpParams, 60 * 1000);
//新建HttpClient对象
//HttpClient httpClient = new DefaultHttpClient(httpParams);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(request);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
strReust = EntityUtils.toString(httpResponse.getEntity());
} else {
strReust = HTTPERROR_Start + " 服务器httpCode: "+ httpResponse.getStatusLine().getStatusCode()+ HTTPERROR_END;
}
httpClient.getConnectionManager().shutdown();
} catch (Exception e) {
strReust = HTTPERROR_Start + e.getMessage() + HTTPERROR_END;
}
return strReust;
} else {
return HTTPERROR_Start + "无法连接网络!" + HTTPERROR_END;
}
}
* <Description>
* 1:wifi
* 2:wap
* 3:无法取得网络
* @since May 10, 2011
* @param conn
* @return <Description>
*
*/
ublic static int getNetType(Context ctx) {
ConnectivityManager conn = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
if (conn == null){
return HttpUtil.NONET_INT;
}
NetworkInfo info = conn.getActiveNetworkInfo();
if (info == null){
return HttpUtil.NONET_INT;
}
String type = info.getTypeName();//MOBILE(GPRS);WIFI
Log.v("tag", "NetworkType=" + type);
if (type.equals("WIFI")) {
return HttpUtil.WIFI_INT;
} else {//if (type.equals("MOBILE")) {
return HttpUtil.WAP_INT;
}
由于我是用移动的卡,所以HttpHost proxy = new HttpHost("10.0.0.172", 80); 这个写死了,这里应该取apn里面的数据,好像移动和联通都是一样的。都是这个代理地址。
分享到:
相关推荐
在较旧的Android版本中,我们可以使用`DefaultHttpClient`,但在新版本中,由于HttpClient已被弃用,建议使用其他替代方案,如OkHttp或Retrofit。 3. **创建HttpPost对象**:根据需要上传文件的URL创建一个`...
本文将深入探讨如何在Android中使用HttpClient进行代理设置,并结合具体的例子来阐述相关知识点。 首先,了解`HttpClient`是Apache的一个开源库,它提供了一个强大的、功能丰富的HTTP客户端API,使得开发者可以方便...
虽然现在有其他更现代的替代方案,如OkHttp和Retrofit,但HttpClient的使用依然广泛,理解其工作原理对于Android开发者来说仍然很有价值。在实际项目中,应根据需求和项目规模来选择最适合的网络通信库。
在Android开发中,HTTP通信是应用与服务器交互的重要方式之一,`Android HttpClient`库就是用于实现这一功能的工具。本文将深入探讨如何使用`Android HttpClient`进行HTTP请求,包括GET、POST、PUT和DELETE等常见...
本主题聚焦于"android httpClient所需jar包"以及与之相关的ksoap2库,这些都是Android应用开发中不可或缺的部分。 首先,让我们详细了解这些jar包的作用: 1. **commons-httpclient-3.1.jar**: 这是Apache ...
首先,我们需要了解如何使用Android的HttpClient。在Android SDK中,`org.apache.http.impl.client.DefaultHttpClient`是主要的HttpClient实现。创建一个HttpClient实例后,你可以通过`HttpGet`或`HttpPost`对象来...
这些库不仅维护了`HttpClient`的功能,还添加了更多特性,如更好的连接管理、错误处理和性能优化。 总结,`HttpClient`在Android中用于处理复杂的网络任务,尤其是文件上传。虽然面临被替代的命运,但在某些情况下...
在Android平台上,HttpClient库曾是开发网络应用时广泛使用的组件,尤其在进行HTTP请求和响应...随着技术的发展,开发者应逐渐转向更现代的解决方案,但理解HttpClient的工作原理对于学习Android网络编程仍有其价值。
在这个"Android HttpClient源码"中,我们可以深入理解其内部工作原理,并学习如何在Android应用中有效地使用它。 首先,HttpClient的核心类是`HttpClient`,它是整个HTTP客户端操作的管理者。通过`HttpClient`,...
Struts2、Android和HttpClient是三个关键的技术领域,它们在本次文件上传的场景中相互结合。Struts2是一个流行的Java Web框架,用于构建MVC(模型-视图-控制器)结构的应用程序。Android是Google开发的移动操作系统...
android9.0不再支持useLibrary 'org.apache.http.legacy'引入httpclient,需要引入jar
Android使用HttpClient发送请求、接收响应很简单,只要如下几步即可: Step1:创建HttpClient对象; Step2:如果需要发送GET请求,则创建HttpGet对象; 如果需要发送POST请求,则创建HttpPost对象; Step3:如果...
android HttpClient 获取网络图片 实例
java.HttpClient与网络请求(解决方案).md
是android的jar中httpclient的源码,是org.apache.http包的源码。其中包含org.apache.http.HttpResponse类。 不是官网上下载的,官网上的源码里面没有org.apache.http.HttpResponse这个类。
Android-异步HttpClient框架,采用两种提交方式 Android-异步HttpClient框架(get和post) Android-异步HttpClient框架 csdn博客地址:http://blog.csdn.net/u014657752
总结来说,`Android HttpClient Network Lib`是一个关于如何在Android应用中使用HttpClient进行网络通信的知识点,涵盖了HttpClient的基本使用方法、优势,以及如何利用提供的jar包和源码进行开发。虽然HttpClient已...
AndroidHttpClient在原生的HttpClient基础上进行了优化,更适合Android环境的性能和内存管理。 ### AndroidHttpClient的创建与配置 创建AndroidHttpClient对象非常简单,只需调用`AndroidHttpClient.newInstance...
Android 使用HttpClient代理
《Android HttpClient库详解与应用实践》 在移动开发领域,Android平台上的网络通信是一个至关重要的环节,HttpClient作为早期广泛使用的网络请求库,对于许多开发者来说并不陌生。本资源"Android_HttpClient_jar包...