android - java.lang.NoSuchFieldError : org. apache.http.message.BasicLineFormatter.INSTANCE 错误

标签 android apache-httpclient-4.x

美好的一天!

我需要帮助!

我通过集成 IIS(SharePoint) 为 Android 开发应用程序。 当我运行此代码(代码 2)时,出现错误

java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE

我在 firstActivity 的 onCreate(Code 1) 方法中运行这段代码

版本 httpclient - 4.3;

代码 1

new Thread(new Runnable() {
            @Override
            public void run() {
                    new HttpsClietn();
    }
}).run();

代码 2

package com.example.HttpsMy;

import android.os.Environment;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;


import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class HttpsClietn {
    HttpsClietn() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException, UnrecoverableKeyException {

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(AuthScope.ANY, new NTCredentials("Grigoriy.Polyakov","password", "", "domain.kz"));

        HttpClientContext context = HttpClientContext.create();
        context.setCredentialsProvider(credsProvider);

        HttpGet httpget = new HttpGet("https://serveer.domain.kz");


       HttpClient client = HttpClientBuilder.create()
               .setSSLSocketFactory(getFactory())
               .setDefaultCredentialsProvider(credsProvider)
               .setSslcontext(getContext())
               .build();

        System.out.println(client.execute(httpget,context).getStatusLine());

    }

    SSLContext getContext() throws NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException, CertificateException, UnrecoverableKeyException {
        //new File("key/keystore.p12"), "1234"
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        KeyStore keyStore = KeyStore.getInstance("PKCS12");

        InputStream keyInput = new FileInputStream(new File(Environment.getExternalStorageDirectory().getPath()+"/kvv/keystore.p12"));
        keyStore.load(keyInput, "1234".toCharArray());
        keyInput.close();

        keyManagerFactory.init(keyStore, "1234".toCharArray());

        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                    }

                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    }
                }
        };

        SSLContext context = SSLContext.getInstance("TLS");
        context.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom());

        return context;
    }

    SSLConnectionSocketFactory getFactory() throws CertificateException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
        return new SSLConnectionSocketFactory(getContext());
    }
}

感谢您的帮助。

最佳答案

Google Android 附带了一个极其过时(BETA 4.0 之前)的 Apache HttpClient 分支。由于类路径上存在旧类,除非将所有类都移动到另一个命名空间('org.apache.http' -> 'thank.you.google.http'),否则 HttpClient 的标准版本无法正确初始化

确保 Apache HttpClient 的库存版本不与其原始命名空间重叠的一种方法是使用 Maven Shade plugin 重新打包它。 , 使用 the port由 Dirk Boye 或 official port of Apache HttpClient to Google Android 开发.

关于android - java.lang.NoSuchFieldError : org. apache.http.message.BasicLineFormatter.INSTANCE 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20238421/

相关文章:

android - Android-listView 中的自定义字体使滚动变慢?

java - j2me和ksoap如何获取asp.net webservice中的特定元素

java - 计算器 Android 应用程序中的乘法在输出中抛出 Alphabeta

java - DefaultHttpClient 在多个请求上保持 Activity 连接

android - javax.net.ssl.SSLPeerUnverifiedException : No peer certificate while I am working with google place api in android

android - Ubuntu 的 adb 问题

android - 写入 'n' 个文件时 ByteArrayOutputStream 出现内存不足错误

java - apache HttpClients 的奇怪瓶颈(同步和异步)

java - 如何使用 Java Apache HttpClient 将文件上传到公共(public) AWS S3 存储桶

java - org.apache.http.client. Fluent 损坏 URL