2015-09-08 18 views
1

我在嘗試在PreferenceFragment中顯示ListPreference時收到以下異常。來自XML偏好設置的UnknownFormatConversionException(僅在Oneplus One上)

請注意,這隻發生在Oneplus One設備上。我已經在Nexus 4,Moto G和S5上嘗試過,沒有任何問題。

堆棧跟蹤:

09-08 14:33:50.434 20107-20107/com.callsign.ferret E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.callsign.ferret, PID: 20107 
java.util.UnknownFormatConversionException: Conversion: 
     at java.util.Formatter$FormatSpecifierParser.unknownFormatConversionException(Formatter.java:2321) 
     at java.util.Formatter$FormatSpecifierParser.advance(Formatter.java:2315) 
     at java.util.Formatter$FormatSpecifierParser.parseConversionType(Formatter.java:2394) 
     at java.util.Formatter$FormatSpecifierParser.parseArgumentIndexAndFlags(Formatter.java:2365) 
     at java.util.Formatter$FormatSpecifierParser.parseFormatToken(Formatter.java:2298) 
     at java.util.Formatter.doFormat(Formatter.java:1071) 
     at java.util.Formatter.format(Formatter.java:1042) 
     at java.util.Formatter.format(Formatter.java:1011) 
     at java.lang.String.format(String.java:1803) 
     at java.lang.String.format(String.java:1777) 
     at android.preference.ListPreference.getSummary(ListPreference.java:168) 
     at android.preference.Preference.onBindView(Preference.java:550) 
     at android.preference.Preference.getView(Preference.java:489) 
     at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:246) 
     at android.widget.AbsListView.obtainView(AbsListView.java:2349) 
     at android.widget.ListView.makeAndAddView(ListView.java:1864) 
     at android.widget.ListView.fillDown(ListView.java:698) 
     at android.widget.ListView.fillGap(ListView.java:662) 
     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5007) 
     at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424) 
     at android.widget.AbsListView.onTouchMove(AbsListView.java:3807) 
     at android.widget.AbsListView.onTouchEvent(AbsListView.java:3638) 
     at android.view.View.dispatchTouchEvent(View.java:8472) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2625) 
     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1770) 
     at android.app.Activity.dispatchTouchEvent(Activity.java:2742) 
     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2586) 
     at android.view.View.dispatchPointerEvent(View.java:8667) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4129) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3995) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550) 
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3603) 
     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3569) 
     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3686) 
     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3577) 
     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3743) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImp 

的preferences.xml加載到我的PreferenceFragment

<ListPreference 
     android:key="@string/pref_key_app_orientation_frequency" 
     android:title="@string/pref_app_orientation_frequency" 
     android:enabled="false" 
     android:entryValues="@array/pref_orientation_frequency_values" 
     android:entries="@array/pref_orientation_frequency"/> 

arrays.xml含有以上提及的陣列:含上述引用

<string-array name="pref_orientation_frequency_values"> 
    <item>100</item> 
    <item>50</item> 
    <item>25</item> 
    <item>10</item> 
</string-array> 

<string-array name="pref_orientation_frequency"> 
    <item>@string/percent_100</item> 
    <item>@string/percent_50</item> 
    <item>@string/percent_25</item> 
    <item>@string/percent_10</item> 
</string-array> 

的strings.xml字符串:

<string name="percent_100">100%</string> 
<string name="percent_50">50%</string> 
<string name="percent_25">25%</string> 
<string name="percent_10">10%</string> 

我首先想到它與百分比符號有關,但刪除它並沒有解決問題。我在堆棧跟蹤中看不到任何提示,並且此問題似乎是設備特定的。

+0

好吧,逃避%。或者使字符串不formatable – Selvin

+0

@Selvin我用盡全力,但即使刪除%也沒有解決問題。 –

回答

3

我有同樣的例外,但在銀河S5。 我在strings.xml中使用'%%'而不是'%'解決了問題。

<string name="percent_100">100%%</string> 
<string name="percent_50">50%%</string> 
<string name="percent_25">25%%</string> 
<string name="percent_10">10%%</string> 

問候

1

使用%%會導致某些版本的Android例外,存在不同的解決方案,對於這樣一個簡單的任務說明here,他們大多相當複雜。

,我決定用一個小版本的百分比字符的Unicode來避免此問題:

&#65130;