9

嗨,希望这符合成为一个写得很好的问题的标准。我是编程新手,我一直在尝试在 android 上为登山者编写一个应用程序,根据他们当前的训练能力告诉用户他们应该攀登什么。该应用程序要求用户输入他们的攀爬能力和墙壁的长度。

我已经为此设置了一个首选项菜单SharedPrefences,其中包含一个数字编辑文本字段和一个列表。最初我有一个类转换异常,因为我试图将编辑文本中的字符串用作浮点/双精度/整数(我尝试了所有三个!)。

我已经将字符串转换为 double 使用Double = Double.valueof(StringFromPrefernce) 它解决了该错误,但现在产生了java.util.FormatFlagsConversionMismatchException: %o does not support ' '我无法找到解决方案的错误。

该应用程序允许用户最初访问首选项菜单,但是一旦他们设置了一些值,任何访问首选项菜单的尝试都会产生这种强制关闭。

解决方案:

在我的preferences.xml 中,我引用了一个字符串。该字符串包含一个 % 符号,它负责强制关闭。删除 % 符号解决了这个问题。

4

6 回答 6

21

似乎是 Android 4 中的一个变化。将字符串中的 % 符号加倍似乎有效 - % 现在似乎是一个转义字符,因此使用 %% 进行自我转义对我来说是这样。

于 2013-02-28T07:21:10.817 回答
9

解决方案:

在我的preferences.xml 中,我引用了一个字符串。该字符串包含一个 % 符号,它负责强制关闭。删除 % 符号解决了这个问题。

于 2012-08-29T10:19:04.183 回答
7

我得到这个是因为我正在使用一个工具来进行自动翻译。它被放入% s而不是%s.

于 2017-12-10T05:53:26.997 回答
1

你需要formatted="false"在你的字符串中添加属性

请参阅Android XML 百分比符号

于 2019-05-01T04:42:42.490 回答
0

尝试修剪输入字符串:

Double d = Double.valueof(StringFromPrefernce.trim());

这应该从字符串的开头和结尾删除不必要的空格。此外,最好用 try/catch 包围您的呼叫,以避免无效输入:

Double d = 0;
try
{
    d = Double.valueof(StringFromPrefernce.trim());
}
catch(NumberFormatException e)
{
    e.printStackTrace(); 
}
于 2012-07-31T23:32:49.173 回答
0

根据 RominaLiuzzi 的评论。您不需要删除 %。你可以用 %% 逃避它

于 2018-03-28T13:58:02.503 回答