簡體   English   中英

來自 XML 首選項的 UnknownFormatConversionException(僅在一加一上)

[英]UnknownFormatConversionException coming from XML preferences (only on Oneplus One)

嘗試在PreferenceFragment顯示ListPreference時出現以下異常。

請注意,這僅發生在一加一設備上。 我在 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

references.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>

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

我有同樣的例外,但在 Galaxy 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>

問候

使用%%會在某些 Android 版本上導致異常, 這里解釋不同的解決方案,其中大多數對於這樣一個簡單的任務來說相當復雜。

我決定通過使用較小版本的百分比字符的 unicode 來避免這個問題:

&#65130;

也許您的問題與摘要定義有關(請參閱 android.preference.ListPreference.getSummary(ListPreference.java:168) 上的日志)您是否在代碼中的某處定義了摘要?

當我在 xml 中將摘要定義為“21%”(僅用於測試)時,我遇到了類似的問題:

<ListPreference
...
app:summary="@string/percentage(value 21%)"
/>

這很有效:

<ListPreference
...
app:summary="@string/percentage(value 21%%)"
/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM