2010-01-22 9 views
10

No puedo crear una instancia de una actividad secundaria. En el logcat veo esta línea:newInstance failed: no <init>

01-22 15:14:38.906: DEBUG/dalvikvm(411): newInstance failed: no <init>() 

Esta es la línea en dalvik que genera ese logcat.

/* 
* public T newInstance() throws InstantiationException, IllegalAccessException 
* 
* Create a new instance of this class. 
*/ 
static void Dalvik_java_lang_Class_newInstance(const u4* args, JValue* pResult) 
... 
    /* find the "nullary" constructor */ 
    init = dvmFindDirectMethodByDescriptor(clazz, "<init>", "()V"); 
    if (init == NULL) { 
     /* common cause: secret "this" arg on non-static inner class ctor */ 
     LOGD("newInstance failed: no <init>()\n"); 
     dvmThrowExceptionWithClassMessage("Ljava/lang/InstantiationException;", 
      clazz->descriptor); 
     RETURN_VOID(); 
    } 

Aquí está la acción que tomo para activar la actividad en un controlador de temporizador.

// move on to Activation 
// ePNSplash is this activity a splash screen 

Intent i = new Intent (ePNSplash.this, Activation.class); 
startActivity (i); 

La actividad que estoy tratando de empezar es de 2 tirantes encima Actividad

Aquí es la primera extensión

public abstract class AndroidScreen extends Activity { 
    .... 

public AndroidScreen (String title, AndroidScreen parent, AndroidScreen main) 
{ 
    super(); 

    myGlobals = Globals.getGlobals(); 

    myGlobals.myLogger.logString("AndroidScreen: 001"); 

    myParent = parent; 
    myMainScreen = main; 
    myTitle = title; 
} 

Esto es sólo el constructor, que parece ser la parte que tiene el problema. Aquí está la segunda extensión y la clase que intento crear.

public class Activation extends AndroidScreen { 

public Activation (String title, AndroidScreen parent, AndroidScreen main) 
{ 
    super (title, parent, main); 
} 

Estoy absolutamente confundido, tengo un constructor, me aseguro que yo llamo mis súper constructores, lo que podría estar mal?

Gracias

Julian

Respuesta

20

de dalvikvm buscando un constructor sin argumentos (que es lo que quieren decir con "nularia", como en "binario" para 2 argumentos, "unario" durante 1 argumento, es "nullary" para 0 argumentos).

en el fragmento que ha mostrado, solo tiene un constructor de tres argumentos. eso no es bueno: se lo instanciará sin argumentos, por lo que necesita un constructor de cero argumentos.

+0

Eso funcionó, gracias. – Bodger

+2

Mi problema era un servicio de intendencia que la clase abstracta no define un constructor predeterminado, solo un constructor con un argumento (nombre de cadena). Como resultado, el compilador me confundió al implementar un constructor predeterminado y lo dejé. Cuando lo agregué como MyIntentService() {super (nulo); } Todo funcionó. Esto fue tan contra intuitivo, gracias por los q & a en esta excepción. – mobibob

+0

¡No podía creer lo que veía cuando esto funcionaba! Instalé y preinflaré fragmentos y agregué un arg cero cuando lo leí y funcionó. ¡Por qué podría haberlo votado aún MÁS! –

Cuestiones relacionadas