2014-11-10 9 views
5

Zauważyłem wiele raportów o awariach dla mojej aplikacji w produkcji dla telefonów Huawei związanych dokładnie z obsługą wielu języków. Żadne inne telefony nie mają tego problemu, ale tylko Huawei.Wielokrotny wyjątek NotFoundException tylko na telefonach Huawei

Wszystkie formy liczby mnogiej istnieją i działają poprawnie na innych urządzeniach.

Wydaje Huawei nie może obsłużyć liczbę mnogą w ogóle:

android.content.res.Resources$NotFoundException: Plural resource ID #0x7f060000 quantity=4 item=few 
     at android.content.res.Resources.getQuantityText(Resources.java:290) 
     at android.content.res.Resources.getQuantityString(Resources.java:397) 
     ... 

android.content.res.Resources$NotFoundException: Plural resource ID #0x7f060000 quantity=6 item=many 
     at android.content.res.Resources.getQuantityText(Resources.java:290) 
     at android.content.res.XResources.getQuantityText(XResources.java:667) 
     at android.content.res.Resources.getQuantityString(Resources.java:397) 
     ... 

Czy ktoś ma ten problem też?

+0

Mam podobny raport o awariach z Nexusa 7 z systemem ** Android 5 **. Może jest to związane z nową wersją Androida? – Czechnology

+0

@Cechnologia nope, pojawiła się również na Androidzie 4. +. – makovkastar

+0

Znaleziono jakieś rozwiązanie? Nie mogę odtworzyć tego problemu na żadnym urządzeniu lub emulatorze. – Czechnology

Odpowiedz

1

Miałem tego rodzaju problem zgodnie z raportami analitycznymi. Te same kłopoty - nie ma urządzenia Huawei.

Miało to zdarzyć na danej liście urządzeń: - Huawei G700-U10 Ascend G700 - Huawei G700-U20 Ascend G700 - Huawei G610-U20 Ascend

StackTrace:

android.content.res.Resources$NotFoundException: Plural resource ID #0x7f0d0000 quantity=5 item=many 
    at android.content.res.Resources.getQuantityText(Resources.java:290) 
    at android.content.res.Resources.getQuantityString(Resources.java:397) 
    at com.sixthsensegames.client.android.app.activities.TournamentInfoActivity2$a$1.run(SourceFile:2233) 
    at android.os.Handler.handleCallback(Handler.java:725) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:153) 
    at android.app.ActivityThread.main(ActivityThread.java:5341) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
    at dalvik.system.NativeStart.main(Native Method) 

Przyjrzałem się klasie Resources, aby wyjaśnić problem i znaleźć WORKAROUND.

public CharSequence getQuantityText(@PluralsRes int id, int quantity) 
     throws NotFoundException { 
    NativePluralRules rule = getPluralRule(); 
    CharSequence res = mAssets.getResourceBagText(id, 
      attrForQuantityCode(rule.quantityForInt(quantity))); 
    if (res != null) { 
     return res; 
    } 
    res = mAssets.getResourceBagText(id, ID_OTHER); 
    if (res != null) { 
     return res; 
    } 
    throw new NotFoundException("Plural resource ID #0x" + Integer.toHexString(id) 
      + " quantity=" + quantity 
      + " item=" + stringForQuantityCode(rule.quantityForInt(quantity))); 
} 

Według tego kodu, jeśli reguła mnoga nie znajduje się na podanej ilości, liczba mnoga z zasadą „INNE” zostaną podane (przed mamy Exception). Dodałem "inny" element (regułę) do definicji liczby mnogiej w pliku strings.xml. Wykonałem aktualizację aplikacji i od tej pory nie otrzymałem żadnego raportu z tej listy urządzeń z tym rodzajem wyjątku.

W moim przypadku było to w rosyjskiej lokalizacji:

<plurals name="career_tournament_goal_wins_left"> 
    <item quantity="one">осталась %1$s победа</item> 
    <item quantity="few">осталось %1$s победы</item> 
    <item quantity="many">осталось %1$s побед</item> 
    <item quantity="other">осталось %1$s побед</item> <!-- for Huawei G700-u20 --> 
</plurals> 

To nie jest panaceum, ale działa przynajmniej obejścia.

Szczęśliwe kodowanie ...

Powiązane problemy