在我的应用程序中,我通过 SSL 与网络服务通信。因为我使用了默认情况下不受 android 支持的多部分实体,所以我包含了以下库:
- httpclient-4.1.1.jar
- httpcore-4.1.jar
- httpmime-4.1.1.jar
服务器使用由 android 支持的授权机构签名的证书。这适用于大多数设备。今天,我的一位用户 (Android 2.2 Motorola Defy) 向我发送了一条日志,其中包含以下内容:
W/System.err( 2328): Caused by: java.lang.NullPointerException
W/System.err( 2328): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl.createSocket(OpenSSLSocketFactoryImpl.java:83)
W/System.err( 2328): at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:375)
W/System.err( 2328): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:168)
W/System.err( 2328): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err( 2328): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err( 2328): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:352)
W/System.err( 2328): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2328): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2328): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2328): at my.api.Client.sendRequest(Client.java)
...
我无法在我的设备上重现这一点,我也不知道为什么会这样。我查看了 OpenSSLSocketFactoryImpl 的源代码,发现 NullPointerException 的唯一来源是因为 sslParameters
是 null
。您知道我可以在我的代码中做什么来解决这个异常吗?
如果您不知道如何解决问题,但知道要问发送日志给我的用户什么,也请给出答案。 我已经问过他,当他试图通过 https 访问网站时,他的浏览器是否显示错误消息。我会在收到回复后立即附在此处。
最佳答案
回溯不完全匹配,但如果您的用户使用代理服务器,您可能想查看您的 HttpClient 版本是否修复了此错误:http://code.google.com/p/android/issues/detail?id=5255
关于android - 创建 SSL 套接字时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6384194/