Создание новой строки из Charset вызывает NoSuchMethodError (Android) - PullRequest
6 голосов
/ 07 июля 2011

У меня есть фрагмент кода, создающего новый String следующим образом:

private final static Charset UNICODE_CHARSET = Charset.forName("UTF-8");

public String makeNewUnicodeString(byte[] octects) {
    return new String(octects, UNICODE_CHARSET);
}

Отлично работает при тестировании на моем компьютере. Но когда я запускаю его на эмуляторе Android, он выдает:

java.lang.NoSuchMethodError: java.lang.String.<init>

Но это работает:

public String makeUnicodeString(byte[] octets) {
    try {
        return new String(octets, "UTF-8")
    } catch (UnsupportedEncodingException uee) {
       // never throw.
    }
}

Я использую Android 2.2 API 8, ред. 2.

Ответы [ 3 ]

4 голосов
/ 07 июля 2011

Поскольку конструктор String (byte[] data, Charset charset) был добавлен только в API уровня 9 (Android SDK 2.3). Таким образом, обновление версии SDK решило мои проблемы. Спасибо всем.

Вот ссылка:

String - Справочник разработчика Android.

Уровни API платформы Android .

1 голос
/ 07 июля 2011

Это похоже на разницу между Java 5 и Java 6.

Конструктор, который принимает CharSet, только в Java 6, а не в Java 5.

http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html

http://download.oracle.com/javase/6/docs/api/java/lang/String.html

РЕДАКТИРОВАТЬ - рассматриваемый конструктор находится в API Android .. это действительно не отвечает на вопрос.

0 голосов
/ 17 июля 2014

Вы можете использовать как это

byte[] raw = null;
        try {
            raw = key.getBytes("US-ASCII");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...