AndroidCAStore 在 4.2.2 Jellybean 上抛出 NullPointerException 警告

Posted

技术标签:

【中文标题】AndroidCAStore 在 4.2.2 Jellybean 上抛出 NullPointerException 警告【英文标题】:AndroidCAStore throws NullPointerException warning on 4.2.2 Jellybean 【发布时间】:2013-05-23 00:55:27 【问题描述】:

我正在为 XMPPConnection 使用以下代码来获取 Keystore 证书

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    conf.setTruststoreType("androidCAStore");
    conf.setTruststorePassword(null);
    conf.setTruststorePath(null);

此代码工作正常,我可以验证用户。但它也会抛出以下异常作为警告

W/System.err(18470): java.lang.NullPointerException
W/System.err(18470):    at java.io.File.fixSlashes(File.java:185)
W/System.err(18470):    at java.io.File.<init>(File.java:134)
W/System.err(18470):    at java.io.FileInputStream.<init> FileInputStream.java:105)
W/System.err(18470):    at org.jivesoftware.smack.ServerTrustManager.<init>(ServerTrustManager.java:71)
W/System.err(18470):    at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:871)
W/System.err(18470):    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:221)

查看 ServerTrustManager 的 source 后,我怀​​疑它在

in = new FileInputStream(configuration.getTruststorePath());

这是否意味着android无法找到TruststorePath,如果是,我应该将它指向哪里。

所有博客都说上面的代码应该可以工作,您不需要为信任库设置路径。

有什么想法吗?

【问题讨论】:

这个问题在我使用他们自己网站上的最新版本的 ASmack 库后得到解决。 【参考方案1】:

我遇到了同样的问题。 原因很简单,TrusstorePath 为空,这就是问题所在。

您必须在 org.jivesoftware.smack 中的 ServerTrustManager.java 中更改几行

if(options.getPassword() != null) 
    password = options.getPassword().toCharArray();


if(options.getPath() == null) 
    trustStore.load(null, password);
 else 
    in = new FileInputStream(options.getPath());
    trustStore.load(in, password);

而不是

in = new FileInputStream(configuration.getTruststorePath());

我添加了

InputStream in = null;
char[] password = null;

到同步块的顶部。

我通知了https://github.com/Flowdalic/asmack的所有者

【讨论】:

嗨,你仍然使用“trustStore.load(null, password);”如果 truststore 为空,那么你会得到一个空指针异常。 我只是尝试为我的 AndroidCAStore 问题修复此问题 :) 该错误在 asmack 上游报告。所以让我们希望他们能适当地修复。【参考方案2】:

当我从他们自己的网站使用最新版本的 ASmack 库后,这个问题得到了解决

【讨论】:

添加了 +1,真正使用 asmack-android-17-0.8.3.jar(最后一个)解决了这个问题。谢谢。 使用最新版本并没有真正帮助。该错误并非每次都发生。 这里的经历与 Umka 相同,只是发生频率较低

以上是关于AndroidCAStore 在 4.2.2 Jellybean 上抛出 NullPointerException 警告的主要内容,如果未能解决你的问题,请参考以下文章

Berkeley DB 错误:无法锁定 je.lck 文件

@Context 注入在 Je​​rsey ContainerRequestFilter (Dropwizard) 中不起作用

在 Joomla 3x 中覆盖 JE 快速联系模块

向 BerkeleyDB-JE 插入数据越来越慢

Vue 路由器的注入在 Je​​st 单元测试期间失败

berkeley-db-je 的最新版本是啥?