2011-07-07 32 views
6

Tôi có một đoạn mã tạo một new String như sau:Tạo một String mới từ một Charset ném NoSuchMethodError (Android)

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

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

Nó hoạt động tốt khi thử nghiệm trên máy tính của tôi. Nhưng khi tôi chạy nó trên giả lập Adroid, nó ném:

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

Nhưng công trình này:

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

Tôi đang sử dụng Adroid 2.2 API 8, rev2.

Trả lời

4

Vì hàm tạo String (byte[] data, Charset charset) chỉ được thêm trong API cấp 9 (Android SDK 2.3). Vì vậy, việc cập nhật phiên bản SDK đã giải quyết được sự cố của tôi. Cảm ơn mọi người.

Ở đây tham chiếu:

String - Tham chiếu nhà phát triển Android.

API Levels of Android Platform.

1

Điều này có vẻ như một sự khác biệt giữa Java 5 và Java 6.

Các nhà xây dựng chấp nhận charset là chỉ trong Java 6 và không có trong 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

EDIT - Các nhà xây dựng trong câu hỏi là trong api android .. điều này không thực sự trả lời câu hỏi.

+0

Android SDK cung cấp các constructor mặc dù, [ 'String (byte mảng, Charset)'] (http://developer.android.com/reference/java/lang /String.html#String(byte[],%20java.nio.charset.Charset)) –

+0

@Mark - bạn nói đúng. Tôi sẽ chỉnh sửa câu trả lời của mình. – Kal

0

Bạn có thể sử dụng như thế này

byte[] raw = null; 
     try { 
      raw = key.getBytes("US-ASCII"); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
Các vấn đề liên quan