2016-07-04 8 views
1

В симуляторе я могу запускать свое приложение, но на устройстве с Jelly Bean OS я получаю сбой. Любая идея почему?java.lang.NoClassDefFoundError: java.nio.charset.StandardCharsets

07-04 12:51:57.576 18243-18279/com.j4nos.moviebuffs6 E/AndroidRuntime: FATAL EXCEPTION: Thread-7940 
      java.lang.NoClassDefFoundError: java.nio.charset.StandardCharsets 
      at com.j4nos.moviebuffs6.Utility$1.run(Utility.java:52) 
      at java.lang.Thread.run(Thread.java:838) 

Это линия мне нужна кодировка:

byte[] out = str.getBytes(StandardCharsets.UTF_8);

+1

https://developer.android.com/reference/java/nio/charset/StandardCharsets.html Он был добавлен в уровне API 19 (Android 4.4) – Fildor

+0

Что я могу использовать insead of 'StandardCharsets'? –

+0

Фидор прав! Стандартная карта не существует в Jelly Bean. –

ответ

4

StandardCharsetswas added in API Level 19. Он не доступен ни для одной из версий Jelly Bean для Android.

+0

Как бы вы понизили мою кодолингу? 'byte [] out = str.getBytes (StandardCharsets.UTF_8);' –

+0

@ János: Используйте 'getBytes()' вместо 'getBytes (Charset)'. – CommonsWare

+3

@ János Вы также можете использовать 'getBytes (« UTF-8 »)'. – Fildor

0

Вопрос: Вы хотите поддержать Jelly Bean?

Если да: вместо этого вы можете использовать версию параметра getBytes, параметрированную по строкам. Вы могли бы даже разделить коды для использования одной версии над другой, зависящей от версии API. (Я не рекомендую это!)

Если нет: просто ограничить ваше приложение до минимального API-версии, равной или выше 19

0

Существуют различные перегруженный .getBytes() метод объявлен в String класса.

public void getBytes(int, int, byte[], int); 
    public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException; 
    public byte[] getBytes(java.nio.charset.Charset); 
    public byte[] getBytes(); 

Вы можете использовать любой из них. но вы должны попробовать это ..

byte[] out = str.getBytes("UTF-8"); 

вместо

byte[] out = str.getBytes(StandardCharsets.UTF_8);