2012-04-26 12 views
0

私はApache HttpAsyncClient(この記事の執筆時点で最新のバージョン4.0-beta1)でAndroid上でREST通信を実装しようとしています。Apache HttpAsyncClient - NoSuchMethodError - URIUtils.extractHost

私の問題は、フレームワーク内から来るMethodNotFoundエラーのために、私が要求を出すことができないということです。

詳細なスタックトレースは、(提示した行の後、次の1は自分のコードから来ている)である:

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 Objectを渡しても、extractHostメソッドを呼び出してクラッシュします。

誰も私のためにこの1つの助けを持っていますか?私はちょうどその途中でJARファイルを追加し、ライブラリを自分でコンパイルしませんでした。

+0

あなたが使用しているJarsがあなたのコード(新しいバージョン/古いバージョン)と互換性がないと思います。正しいバージョンを取得しようとするか、Jarのバージョンに従ってコードを変更してください。 – kosa

+0

答え[ここ](http://stackoverflow.com/questions/10155513/android-nosuchmethoderror-with-apk-file-apache-httputils-core/10258360#10258360)が役立つかどうかを確認してください。 – yorkw

答えて

3

Apache HttpAsyncClientは、HttpCoreという低レベルのHTTP転送ライブラリに基づいています。 Google Androidには、同じライブラリをベースにしたApache HttpClientの古いバージョンが同梱されています。 HttpAsyncClientには、Androidに同梱されているHttpCoreの新しいバージョンが必要です。しかし、新しいバージョンからメソッドを呼び出そうとするたびに、古いバージョンのクラスがクラスローダによって最初に取得され、NoSuchMethodError例外が発生します。

残念ながら、この問題の唯一の解決策は、すべてのHttpAsyncClientコードとその依存関係を別の名前空間に移動することです。

関連する問題