Java Apache HttpAsyncClient-NoSuchMethodError-URIUtils.extractHost

Java Apache HttpAsyncClient-NoSuchMethodError-URIUtils.extractHost,java,android,asynchronous,httpclient,nosuchmethoderror,Java,Android,Asynchronous,Httpclient,Nosuchmethoderror,我正试图在Android上使用ApacheHttpAsyncClient(版本4.0-beta1,这是撰写本文时的最新版本)实现REST通信 我的问题是,由于框架内的MethodNotFound错误,我无法获取任何请求 详细的stacktrace是(在显示的行之后,下一行来自我自己的代码): 我所做的是: private static final String SERVER_SCHEME = "http"; private static final String SERVER_HOST = "l

我正试图在Android上使用ApacheHttpAsyncClient(版本4.0-beta1,这是撰写本文时的最新版本)实现REST通信

我的问题是,由于框架内的MethodNotFound错误,我无法获取任何请求

详细的stacktrace是(在显示的行之后,下一行来自我自己的代码):

我所做的是:

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));
}
为了这个例子,我删除了异常处理。问题是,我得到了上面描述的异常。因此,由于它是beta版,我考虑为HttpPost使用不同的构造函数。但是,即使我给构造函数一个URI对象,它也会试图调用extractHost方法并崩溃


在这件事上有人能帮我吗?顺便说一句,我只是添加了JAR,并没有亲自编译库。

Apache HttpAsyncClient基于一个名为HttpCore的低级HTTP传输库。Google Android附带了一个非常过时的ApacheHttpClient版本,它也基于同一个库。HttpAsyncClient需要Android附带的更新版本的HttpCore。但是,当试图从较新版本调用方法时,类加载器首先会从较旧版本中提取类,从而导致NoSuchMethodError异常

不幸的是,这个问题的唯一解决方案是将所有HttpAsyncClient代码及其依赖项移动到不同的名称空间

2020年11月更新


升级到Apache HttpClient 5.x

Apache HttpAsyncClient基于名为HttpCore的低级HTTP传输库。Google Android附带了一个非常过时的ApacheHttpClient版本,它也基于同一个库。HttpAsyncClient需要Android附带的更新版本的HttpCore。但是,当试图从较新版本调用方法时,类加载器首先会从较旧版本中提取类,从而导致NoSuchMethodError异常

不幸的是,这个问题的唯一解决方案是将所有HttpAsyncClient代码及其依赖项移动到不同的名称空间

2020年11月更新


升级到Apache HttpClient 5.x

我认为您使用的JAR与您的代码(新版本/旧版本)不兼容。尝试获取正确的版本(或)根据Jar版本更改代码。看看答案是否有帮助。我认为您使用的Jar与您的代码(新版本/旧版本)不兼容。尝试获取正确的版本(或)根据Jar版本更改代码。看看答案是否有用。
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));
}