从Charset创建一个新的String抛出NoSuchMethodError(Android)

时间:2011-07-07 03:08:39

标签: java android string character-encoding

我有一段代码创建一个新的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,rev 2。

3 个答案:

答案 0 :(得分:4)

由于构造函数String (byte[] data, Charset charset)仅在API级别9(Android SDK 2.3)中添加。所以更新SDK版本解决了我的问题。谢谢大家。

这里的参考:

String - Android开发人员参考。

API Levels of Android Platform

答案 1 :(得分:1)

这似乎是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

编辑 - 有问题的构造函数在android api中..这并没有真正回答这个问题。

答案 2 :(得分:0)

你可以这样使用

byte[] raw = null;
        try {
            raw = key.getBytes("US-ASCII");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }