0

AndroidでApacheHttpAsyncClient(この投稿を書いている時点で最新のバージョン4.0-beta1)を使用してREST通信を実装しようとしています。

私の問題は、フレームワーク内からの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を追加しただけで、ライブラリを自分でコンパイルしませんでした。

4

1 に答える 1

4

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

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

2020年11月の更新

ApacheHttpClient5.xにアップグレードします

于 2012-04-27T20:35:11.887 に答える