现在的位置: 首页 > 程序设计> 正文
Android 开发之 HttpClient Class can not find 之解决办法
2012年03月26日 程序设计 评论数 3 ⁄ 被围观 3,541+

相信大家在开发 Android 的过程中遇到过这么一种情况,那就是 “Could not find class 'org.apache.commons.httpclient.HttpClient'”。

尤其是在 eclipse 的插件ADT升级之后,很容易出现该问题,昨天Google放出了ADT的升级包,然后我也就升级了一下开发环境,没想到前天还运行好好的程序,今天突然就不会工作了,检查log发现,HttpClient无法找到,但是在普通的Java运行环境下就可以正常运行。

因为Apache的HttpClient开发包,Google自己也定制了一份,已经内置到开发环境中了,所以我们如果使用纯粹的Apache原生态的HttpClient开发包就可能出现冲突的问题,每当Google升级ADT之后,说不定程序就Over了。

实在没有办法,那就把基于Apache原生态的HttpClient完全替换成Google定制后的类型吧,转换前后的代码对比如下:

基于Apache原生态的HttpClient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.shiny.mid.net;
 
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
 
public final class HSHttpClient {
 
private static final int CONNECTION_TIMEOUT = 20000;
private static HSHttpClient mHSHttpClient;
 
private HSHttpClient() {
}
 
public static synchronized HSHttpClient getInstance() {
if (mHSHttpClient == null) {
mHSHttpClient = new HSHttpClient();
}
return mHSHttpClient;
}
 
/**
* Using GET method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpGet(String url, String queryString) throws Exception {
String responseData = null;
 
if (queryString != null && !queryString.equals("")) {
url += "?" + queryString;
}
 
HttpClient httpClient = new HttpClient();
GetMethod httpGet = new GetMethod(url);
httpGet.getParams().setParameter("http.socket.timeout",
new Integer(CONNECTION_TIMEOUT));
 
try {
int statusCode = httpClient.executeMethod(httpGet);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("HttpGet Method failed: "
+ httpGet.getStatusLine());
}
responseData = httpGet.getResponseBodyAsString();
} catch (Exception e) {
throw new Exception(e);
} finally {
httpGet.releaseConnection();
httpClient = null;
}
 
return responseData;
}
 
/**
* Using POST method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpPost(String url, String queryString) throws Exception {
String responseData = null;
HttpClient httpClient = new HttpClient();
PostMethod httpPost = new PostMethod(url);
httpPost.addParameter("Content-Type",
"application/x-www-form-urlencoded");
httpPost.getParams().setParameter("http.socket.timeout",
new Integer(CONNECTION_TIMEOUT));
if (queryString != null && !queryString.equals("")) {
httpPost.setRequestEntity(new ByteArrayRequestEntity(queryString
.getBytes()));
}
 
try {
int statusCode = httpClient.executeMethod(httpPost);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("HttpPost Method failed: "
+ httpPost.getStatusLine());
}
responseData = httpPost.getResponseBodyAsString();
} catch (Exception e) {
throw new Exception(e);
} finally {
httpPost.releaseConnection();
httpClient = null;
}
 
return responseData;
}
}
package com.shiny.mid.net;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public final class HSHttpClient {

private static final int CONNECTION_TIMEOUT = 20000;
private static HSHttpClient mHSHttpClient;

private HSHttpClient() {
}

public static synchronized HSHttpClient getInstance() {
if (mHSHttpClient == null) {
mHSHttpClient = new HSHttpClient();
}
return mHSHttpClient;
}

/**
* Using GET method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpGet(String url, String queryString) throws Exception {
String responseData = null;

if (queryString != null && !queryString.equals("")) {
url += "?" + queryString;
}

HttpClient httpClient = new HttpClient();
GetMethod httpGet = new GetMethod(url);
httpGet.getParams().setParameter("http.socket.timeout",
new Integer(CONNECTION_TIMEOUT));

try {
int statusCode = httpClient.executeMethod(httpGet);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("HttpGet Method failed: "
+ httpGet.getStatusLine());
}
responseData = httpGet.getResponseBodyAsString();
} catch (Exception e) {
throw new Exception(e);
} finally {
httpGet.releaseConnection();
httpClient = null;
}

return responseData;
}

/**
* Using POST method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpPost(String url, String queryString) throws Exception {
String responseData = null;
HttpClient httpClient = new HttpClient();
PostMethod httpPost = new PostMethod(url);
httpPost.addParameter("Content-Type",
"application/x-www-form-urlencoded");
httpPost.getParams().setParameter("http.socket.timeout",
new Integer(CONNECTION_TIMEOUT));
if (queryString != null && !queryString.equals("")) {
httpPost.setRequestEntity(new ByteArrayRequestEntity(queryString
.getBytes()));
}

try {
int statusCode = httpClient.executeMethod(httpPost);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("HttpPost Method failed: "
+ httpPost.getStatusLine());
}
responseData = httpPost.getResponseBodyAsString();
} catch (Exception e) {
throw new Exception(e);
} finally {
httpPost.releaseConnection();
httpClient = null;
}

return responseData;
}
}

基于Google定制的HttpClient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.dlgreat.bbshow.net;
 
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
 
public final class BBHttpClient {
 
private static final int CONNECTION_TIMEOUT = 20000;
private static BBHttpClient mHSHttpClient;
 
private BBHttpClient() {
}
 
public static synchronized BBHttpClient getInstance() {
if (mHSHttpClient == null) {
mHSHttpClient = new BBHttpClient();
}
return mHSHttpClient;
}
 
/**
* Using GET method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpGet(String url, String queryString) throws Exception {
if (queryString != null && !queryString.equals("")) {
url += "?" + queryString;
}
 
HttpGet httpGet = new HttpGet(url);
 
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CONNECTION_TIMEOUT);
HttpClient httpClient = new DefaultHttpClient(params);
 
try {
HttpResponse response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
System.err.println("HttpGet Method failed: "
+ response.getStatusLine().toString());
httpGet.abort();
}
return EntityUtils.toString(response.getEntity());
} catch (Exception e) {
throw new Exception(e);
} finally {
httpClient.getConnectionManager().shutdown();
}
}
 
/**
* Using POST method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpPost(String url, String queryString) throws Exception {
HttpPost httpPost = new HttpPost(url);
 
if (queryString != null && !queryString.equals("")) {
StringEntity se = new StringEntity(queryString);
httpPost.setHeader("Content-Type",
"application/x-www-form-urlencoded");
httpPost.setEntity(se);
}
 
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CONNECTION_TIMEOUT);
HttpClient httpClient = new DefaultHttpClient(params);
 
try {
HttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
System.err.println("HttpPost Method failed: "
+ response.getStatusLine().toString());
httpPost.abort();
}
return EntityUtils.toString(response.getEntity());
} catch (Exception e) {
throw new Exception(e);
} finally {
httpClient.getConnectionManager().shutdown();
}
}
}
package com.dlgreat.bbshow.net;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;

public final class BBHttpClient {

private static final int CONNECTION_TIMEOUT = 20000;
private static BBHttpClient mHSHttpClient;

private BBHttpClient() {
}

public static synchronized BBHttpClient getInstance() {
if (mHSHttpClient == null) {
mHSHttpClient = new BBHttpClient();
}
return mHSHttpClient;
}

/**
* Using GET method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpGet(String url, String queryString) throws Exception {
if (queryString != null && !queryString.equals("")) {
url += "?" + queryString;
}

HttpGet httpGet = new HttpGet(url);

HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CONNECTION_TIMEOUT);
HttpClient httpClient = new DefaultHttpClient(params);

try {
HttpResponse response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
System.err.println("HttpGet Method failed: "
+ response.getStatusLine().toString());
httpGet.abort();
}
return EntityUtils.toString(response.getEntity());
} catch (Exception e) {
throw new Exception(e);
} finally {
httpClient.getConnectionManager().shutdown();
}
}

/**
* Using POST method.
*
* @param url
*            The remote URL.
* @param queryString
*            The query string containing parameters
* @return Response string.
* @throws Exception
*/
public String httpPost(String url, String queryString) throws Exception {
HttpPost httpPost = new HttpPost(url);

if (queryString != null && !queryString.equals("")) {
StringEntity se = new StringEntity(queryString);
httpPost.setHeader("Content-Type",
"application/x-www-form-urlencoded");
httpPost.setEntity(se);
}

HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CONNECTION_TIMEOUT);
HttpClient httpClient = new DefaultHttpClient(params);

try {
HttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
System.err.println("HttpPost Method failed: "
+ response.getStatusLine().toString());
httpPost.abort();
}
return EntityUtils.toString(response.getEntity());
} catch (Exception e) {
throw new Exception(e);
} finally {
httpClient.getConnectionManager().shutdown();
}
}
}

目前有 3 条留言 其中:访客:3 条, 博主:0 条

  1. 刘宇洲 : 2014年08月01日22:00:31  -49楼 @回复 回复

    楼主还有其他方法吗,可以私下知道我是新手qq:1219527704

  2. 1314hwl : 2012年05月04日16:56:27  -48楼 @回复 回复

    博主:和你遇到同样的问题,但是我不知道怎么像你说的那样改源码文件,能指点下吗,感觉不敬啊!先谢过…………[失落]

    • 1314hwl : 2012年05月05日09:48:03 @回复 回复

      @1314hwl: qq:405146836交流下

给我留言

留言无头像?


×
腾讯微博