Java 格式标志转换不匹配异常
嗨,希望这符合作为一个好的书面问题的标准。 我是编程新手,我一直在尝试为android上的攀岩者编写一个应用程序,根据他们当前的训练能力告诉用户应该攀岩什么。该应用程序要求用户输入他们的攀爬能力和墙的长度 我已经使用Java 格式标志转换不匹配异常,java,android,Java,Android,嗨,希望这符合作为一个好的书面问题的标准。 我是编程新手,我一直在尝试为android上的攀岩者编写一个应用程序,根据他们当前的训练能力告诉用户应该攀岩什么。该应用程序要求用户输入他们的攀爬能力和墙的长度 我已经使用SharedReferences为此设置了一个带有数字编辑文本字段和列表的首选项菜单。 最初我有一个类强制转换异常,因为我试图将编辑文本中的字符串用作float/double/int(我尝试了所有三个!) 我使用double=double.valueof(StringFromPref
SharedReferences
为此设置了一个带有数字编辑文本字段和列表的首选项菜单。
最初我有一个类强制转换异常,因为我试图将编辑文本中的字符串用作float/double/int(我尝试了所有三个!)
我使用double=double.valueof(StringFromPreference)
它解决了该错误,但现在产生了错误java.util.FormatFlagsConversionMismatchException:%o不支持“”
,我无法找到解决方案
应用程序允许用户最初访问首选项菜单,但一旦用户设置了一些值,任何试图访问首选项菜单的尝试都将产生此强制关闭
解决方案:
在my preferences.xml中,我引用了一个字符串。该字符串包含一个%符号,该符号负责强制关闭。删除%符号修复了该问题。尝试修剪输入字符串:
Double d = Double.valueof(StringFromPrefernce.trim());
这将删除字符串开头和结尾不必要的空格。
此外,最好在通话中使用try/catch来避免无效输入:
Double d = 0;
try
{
d = Double.valueof(StringFromPrefernce.trim());
}
catch(NumberFormatException e)
{
e.printStackTrace();
}
解决方案:
在my preferences.xml中,我引用了一个字符串。该字符串包含一个%符号,该符号负责强制关闭。删除%符号修复了这个问题。似乎是Android 4的一个变化。将字符串中的%符号加倍似乎有效-%现在似乎是一个转义字符,因此使用%%进行自我转义为我做到了这一点 我之所以会这样,是因为我使用了一种工具来进行自动翻译。它将
%s
替换为%s
根据RominaLiuzzi的评论。
您不需要删除%。您可以使用%%对其进行转义。您需要在字符串中添加
formatted=“false”
属性
请参见显然,当您尝试提交首选项时,出现了一些问题。您能在编辑框中读取用户输入的值并试图将其保存到SharedPrefsHi Pavel的地方发布代码吗?谢谢您的帮助。我试过你的建议,但我还是有点力不从心。我已经发布了更多您要求的代码,希望您能告诉我为什么强制关闭。您更新的代码不包含提交更改到SharedPref的实际过程。您确定从`d=Double.valueof(StringFromPreference.trim());`呼叫我想这是在别的地方发生的。你能把剩下的代码贴出来吗?嗨,帕维尔,我已经贴出了我正在使用的代码。虽然大多数其他代码不涉及共享首选项。但找到了解决方案,即从我用于生成android:summary文本的字符串中删除%符号。真正奇怪的是,它并没有导致在新安装时强制关闭,但一旦从列表中选择了一个值,每次用户试图打开首选项菜单时,应用程序都会强制关闭。我想这是android sdk中的一个bug?谢谢你的时间,Pavel。你不需要删除%你可以用%%转义它。