2011-07-07 10 views
6

Mam fragment kodu, tworząc nowy ciąg następujące:Tworzenie nowego ciąg przez charset rzuca NoSuchMethodError (Android)

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

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

działa prawidłowo podczas testowania na moim komputerze. Ale kiedy go uruchomić na emulatorze Adroid, rzuca:

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

ale to działa:

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

Używam Adroid 2.2 API 8 Rev2.

Odpowiedz

4

Ponieważ konstruktor String (byte[] data, Charset charset) został dodany tylko na poziomie API 9 (Android SDK 2.3). Aktualizacja wersji SDK rozwiązała moje problemy. Dziękuję wszystkim.

Tutaj odniesienie:

String - Android Developer Reference.

API Levels of Android Platform.

1

Wydaje się różnicę pomiędzy Java 5 i Java 6.

konstruktora przyjmująca CharSet tylko Java 6, a nie w 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

EDYTUJ - Konstruktor, o którym mowa, jest w api apl .. Android nie odpowiada na pytanie.

+0

Android SDK oferuje konstruktora choć [ 'String (tablica bajtów, Kodowanie)'] (http://developer.android.com/reference/java/lang /String.html#String(byte[],%20java.nio.charset.Charset)) –

+0

@Mark - masz rację. Będę edytować moją odpowiedź. – Kal

0

Można użyć takiego

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