哪些年我们遇到的Exception and Error

本文讨论了Android开发中遇到的常见问题,包括空指针异常、Activity管理问题、依赖版本冲突、R文件丢失等,并提供了相应的解决方法。

2013-6-11 15:34:53

重新部署一个工程的时候遇到:

ActivityManager: Warning: Activity not started, its current task has been brought to the front

把模拟器工程删掉,重新部署解决,或者有朋友说,关掉模拟器从新开启


 

经常遇到,空指针:

java.lang.NullPointerException

这次原因比较坑,是我工具类里返回结果是null,调试n次都不知道结果。。。

平时的时候大多是获取结果失败之类。多看看log解决。

 


2013-6-11 21:18:54

这个或许不能算是异常

尝试使用:slidingmenu  和  fastjson 引入 slidingmenu   发现报错,开始没看错误信息,后来发现不看错误提示是多么的错误!

以为工程哪里出错了,重新创建了工程,copy了代码。后来看了console 信息提示:

Found 3 versions of android-support-v4.jar in the dependency list,
but not all the versions are identical (check is based on SHA-1 only at this time).
All versions of the libraries must be the same at this time.

是三个版本冲突,坑。。。自带生成的版本比较高,slidingmenu   lib 版本低。

解决办法:将 slidingmenu   中的super v4 .jar包拷贝到现在工程中来。

当然,将现在的spuer v4 拷贝以前的 slidingmenu  中去也可以,这样防止以后使用出错,不过我只是估计怕出错,没尝试,

问题解决了,今晚,搞定 slidingmenu   控件使用,可能吗?


 2013-6-11 22:00:42

R文件丢失

今晚是要把能遇到的全都遇到吗???????要抓狂了

导入slidingmenu控件时候,copy了几个xml文件,修改了下,然后记不清怎么操作,发现R文件丢失了。。

以前遇到的时候,都是google。。这次也不例外。不过网上办法不一定适合。

这次解决办法:

首先要知道 无法生成R文件 是忧郁XML文件出错了。所以无法生成。

如何判断是哪个xml文件呢????

1,console中的信息clear一下,

2,然后再clear项目一下,

3,这个时候,console中会有很多红色的信息,参照这个肯定能准确的找到哪个文件报错了

然后,根据错误xml文件,删了重新写,就是了。

搞定。


 

 

转载于:https://www.cnblogs.com/wang-xiaohao/archive/2013/06/11/3131823.html

<think>首先,用户的问题是关于解决 keytool 错误:"keytool error: java.lang.Exception: Public keys in reply and keystore don't match"。我需要基于提供的引用来构建回答。 关键引用: - [^1]: 讨论了这个错误,强调可能原因。 - [^2]: 指出如果 Tomcat 的 server.xml 中绑定了 keystore,它必须包含私钥条目。 - [^3]: 提到别名冲突可能导致错误,建议在导入时使用不同的别名。 - [^4]: 关于无法建立链的错误,用户困惑于导入顺序。 - [^5]: 关于别名不存在的错误。 用户的问题具体是:"Public keys in reply and keystore don't match",所以我应该聚焦于这个错误。 根据系统级指令: - 所有行内数学表达式使用 $...$ 格式。但这个问题是关于 Java keytool 的,可能没有数学表达式。不过,如果有变量或代码,我可以使用。 - 独立公式使用 $$...$$ 并单独成段。同样,可能不适用。 - LaTeX 语法正确:确保任何代码或变量正确。 - 使用中文回答:整个响应必须用中文。 - 生成相关问题:在回答后添加相关问题。 - 引用的段落末尾自然地添加引用标识:例如 [^1]。 回答结构: - 清晰、逐步解决问题。 - 保证真实可靠,基于引用。 步骤: 1. **理解错误**:解释错误 "Public keys in reply and keystore don't match" 的含义。它发生在尝试导入证书时,回复中的公钥与 keystore 中已有的公钥不匹配。 2. **可能原因**:基于引用: - [^1] 和 [^2] 强调可能原因:keystore 必须包含私钥条目,如果它被绑定到域。 - [^3] 提到别名冲突:如果导入时使用相同的别名,可能会导致错误。 - 其他原因:证书不匹配、导入错误的证书等。 3. **解决方案**: - 确保 keystore 包含私钥(如果是用于服务器)。 - 在导入时使用不同的别名,避免冲突 [^3]。 - 验证证书链:确保导入的证书是完整的链。 - 检查证书是否与 keystore 中的条目匹配。 4. **逐步解决指南**: - 步骤1: 列出 keystore 中的别名和条目:使用 `keytool -list -v -keystore your_keystore.jks` 查看现有条目。 - 步骤2: 确保导入的证书与现有条目匹配。如果导入新证书,使用新别名。 - 步骤3: 导入命令示例:`keytool -import -alias new_alias -file certificate.cer -keystore your_keystore.jks` - 步骤4: 如果错误 persist,检查证书链是否正确导入 [^4]。 5. **生成相关问题**:在回答后添加 2-3 个相关问题。 回答结构: - 开头:确认问题。 - 解释错误原因。 - 提供解决方案步骤。 - 结尾:总结。 - 然后:相关问题。 用中文写。 最终响应: - 先写响应内容。 - 结束时添加相关问题。</think>### Keytool 错误“Public keys in reply and keystore don't match”解决方案 您遇到的错误 `keytool error: java.lang.Exception: Public keys in reply and keystore don't match` 是 keytool 工具在导入证书时常见的报错。这通常发生在尝试将证书(如 `.cer` 或 `.crt` 文件)导入到 Java 密钥库(Keystore)时,导入的证书公钥与密钥库中现有条目的公钥不匹配。错误可能源于密钥库配置错误、别名冲突或证书链问题。下面我将逐步解释原因并提供详细的解决方案。整个过程基于常见实践和参考引用[^1][^2][^3]。 #### 错误原因分析 - **公钥不匹配**:导入的证书公钥与密钥库中指定别名下的公钥不一致。例如,密钥库中已有某个别名的条目(包含私钥或公钥),但导入的新证书不是其对应的公钥部分[^1][^2]。 - **别名冲突**:如果导入时使用的别名与密钥库中现有别名相同,但证书内容不同,会导致公钥冲突[^3]。 - **密钥库绑定问题**:如果密钥库被用于服务器(如 Tomcat),它必须包含私钥条目。如果只导入公钥证书而没有私钥,操作会失败[^2]。 - **证书链不完整**:导入的证书可能不是完整的链(例如,缺少中间 CA 证书),导致 keytool 无法验证公钥一致性[^4]。 #### 逐步解决方案 按照以下步骤操作,确保使用正确的命令和顺序。假设您使用的是 Java keytool 工具,密钥库文件为 `your_keystore.jks`(或 `.keystore`),证书文件为 `certificate.cer`。操作前请备份您的密钥库。 1. **检查密钥库现有条目** 首先,列出密钥库中的所有别名和公钥信息,确认是否存在冲突的别名或条目。 ```bash keytool -list -v -keystore your_keystore.jks ``` 输出中查找 `Alias name` 和 `Public Key` 部分。如果别名已存在,但公钥与要导入的证书不匹配,您需要删除旧条目或使用新别名[^3][^5]。 2. **删除冲突的别名(可选)** 如果现有别名导致冲突,删除该别名条目。确保别名存在后再删除(参考引用[^5])。 ```bash keytool -delete -alias old_alias -keystore your_keystore.jks ``` 如果别名不存在,命令会报错,请先通过步骤1确认。 3. **导入证书时使用新别名** 导入证书时,避免使用现有别名。选择一个新别名(如 `new_alias`),并执行导入命令。 ```bash keytool -import -alias new_alias -file certificate.cer -keystore your_keystore.jks ``` 系统会提示输入密钥库密码和确认导入。输入 `yes` 完成操作。这能防止别名冲突引发的公钥不匹配[^3]。 4. **确保密钥库包含私钥(针对服务器场景)** 如果密钥库用于 Web 服务器(如 Tomcat),它必须包含私钥条目。如果只导入公钥证书,会导致错误。 - 生成新密钥对和证书请求(如果缺失私钥): ```bash keytool -genkeypair -alias server_alias -keyalg RSA -keystore your_keystore.jks ``` 然后导入签发的证书。 - 或者,直接导入包含私钥的 PKCS12 文件(如果可用)[^2]。 5. **验证证书链完整性** 如果错误涉及证书链(如 `Failed to establish chain`),确保导入的证书是完整链。先导入根 CA 证书,再导入中间 CA 证书,最后导入实体证书。 ```bash keytool -import -alias root_ca -file root.cer -keystore your_keystore.jks keytool -import -alias intermediate_ca -file intermediate.cer -keystore your_keystore.jks keytool -import -alias entity_cert -file certificate.cer -keystore your_keystore.jks ``` 每个别名必须唯一,顺序正确[^3][^4]。 #### 常见问题排查 - **密码错误**:确保密钥库密码正确,否则 keytool 无法访问条目。 - **证书格式**:确认证书文件是 DER 或 PEM 格式,keytool 支持 `.cer`、`.crt` 或 `.pem`。 - **环境问题**:在命令行以管理员权限运行 keytool,避免权限问题。 - **测试导入**:导入后,再次运行 `keytool -list -v` 验证公钥是否匹配。 如果以上步骤无效,错误可能源于证书本身(如无效或损坏的证书)。建议从证书颁发机构(CA)重新获取证书,并重试导入过程。多数情况下,使用新别名和确保私钥存在即可解决此问题[^1][^2][^3]。 #### 相关问题 1. 如何生成自签名证书用于测试 keytool 导入? 2. keytool 导入证书时出现“别名不存在”错误该如何解决? 3. Tomcat 服务器配置密钥库时有哪些注意事项?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值