2011-07-07 18 views
6

que tiene un fragmento de código crea una nueva cadena de la siguiente manera:Creación de una nueva cadena de un juego de caracteres lanza NoSuchMethodError (Android)

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

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

Funciona bien cuando se prueba en mi equipo. Pero cuando lo ejecuto en emulador Adroid, se lanza:

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

Pero esto funciona:

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

estoy usando Adroid 2.2 API 8, rev2.

Respuesta

4

Dado que el constructor String (byte[] data, Charset charset) solo se agregó en API Nivel 9 (Android SDK 2.3). Así que actualizar la versión de SDK resolvió mis problemas. Gracias a todos.

Aquí la referencia:

String - Android desarrollador de referencia.

API Levels of Android Platform.

1

Esto parece como una diferencia entre Java y Java 5 6.

El constructor que acepta CharSet sólo en Java 6 y no en 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

EDITAR - El constructor en cuestión está en la API de Android ... esto realmente no responde la pregunta.

+0

El SDK de Android ofrece al constructor sin embargo, [ 'String (matriz de bytes, juego de caracteres)'] (http://developer.android.com/reference/java/lang /String.html#String(byte[],%20java.nio.charset.Charset)) –

+0

@Mark - tienes razón. Editaré mi respuesta. – Kal

0

Se puede utilizar como esto

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