我想用Apache HttpAsyncClient(版本4.0-beta1,這是寫這篇文章時最新的版本)在Android上實現REST通信。Apache HttpAsyncClient - NoSuchMethodError - URIUtils.extractHost
我的問題是,我無法得到任何請求,因爲來自框架內的MethodNotFound錯誤。
詳細的堆棧跟蹤是(所提出的行之後,下一個來自於我自己的代碼):
java.lang.NoSuchMethodError: org.apache.http.client.utils.URIUtils.extractHost
at org.apache.http.impl.nio.client.AbstractHttpAsyncClient.determineTarget(AbstractHttpAsyncClient.java:594)
at org.apache.http.impl.nio.client.AbstractHttpAsyncClient.execute(AbstractHttpAsyncClient.java:578)
at org.apache.http.impl.nio.client.AbstractHttpAsyncClient.execute(AbstractHttpAsyncClient.java:569)
我所做的是以下幾點:
private static final String SERVER_SCHEME = "http";
private static final String SERVER_HOST = "localhost";
private static final int SERVER_PORT = 3000;
private static final String SERVER_BASE_PATH = "/api/v1";
private static final String PATH_LOGIN = "/login";
private DefaultHttpAsyncClient http_client;
public void test(String email, String password, ConnectionManagerCallback callback) {
this.http_client = new DefaultHttpAsyncClient();
this.http_client.start();
this.http_client.getCredentialsProvider().setCredentials(new AuthScope(SERVER_HOST, SERVER_PORT), new UsernamePasswordCredentials(email, password));
HttpPost request = new HttpPost(SERVER_SCHEME + "://" + SERVER_HOST + ":" + SERVER_PORT + SERVER_BASE_PATH + PATH_LOGIN);
this.http_client.execute(request, new Callback(REQUEST_LOGIN, callback));
}
我已刪除了異常爲了舉例而處理。問題是,我得到了我上面描述的異常。因此,因爲它是一個測試版本,我想爲HttpPost使用不同的構造函數。但即使當我將URI對象提供給構造器時,它也會嘗試調用extractHost方法並崩潰。
有沒有人對我有任何幫助?我剛剛添加了JAR,並沒有自己編譯庫。
我認爲您使用的Jars與您的代碼(新版本/舊版本)不兼容。嘗試獲得正確的版本(或)根據Jar版本更改您的代碼。 – kosa 2012-04-26 14:25:47
看看答案[這裏](http://stackoverflow.com/questions/10155513/android-nosuchmethoderror-with-apk-file-apache-httputils-core/10258360#10258360)有幫助。 – yorkw 2012-04-26 23:07:10