2010-01-22 9 views
10

non posso istanziare un'attività secondaria. Nel logcat vedo questa riga:newInstance fallito: nessun <init>

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

Questa è la riga in dalvik che genera quel 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(); 
    } 

Ecco l'azione che eseguo per attivare l'attività in un gestore di timer.

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

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

L'attività che sto cercando di iniziare è 2 estensioni di cui sopra Attività

Ecco la prima estensione

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; 
} 

Questo è solo il costruttore, che sembra essere la parte che ha il problema. Ecco la seconda estensione e la classe che sto cercando di creare.

public class Activation extends AndroidScreen { 

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

Sono assolutamente confuso, ho un costruttore, mi assicuro che io chiamo i miei costruttori di super, che cosa potrebbe essere sbagliato?

Grazie

Julian

risposta

20

dalvikvm di ricerca di un costruttore zero argomento (che è quello che si intende per "nullaria", come in "binario" per 2 argomenti, "unario" per 1 argomento, si è "nullary" per 0 argomenti).

nello snippet che hai mostrato, hai solo un costruttore di tre argomenti. non va bene: sarai istanziato senza argomenti, quindi hai bisogno di un costruttore di argomenti zero.

+0

Ha funzionato, grazie. – Bodger

+2

Il mio problema era un IntentService che la classe astratta non definisce un costruttore predefinito, solo un costruttore con un argomento (nome String). Di conseguenza, sono stato confuso dal compilatore sull'implementazione di un costruttore predefinito e l'ho lasciato fuori. Quando l'ho aggiunto come MyIntentService() {super (null); } ha funzionato tutto. Questo era così contro intuitivo - grazie per il q & a su questa eccezione. – mobibob

+0

Non potevo credere ai miei occhi quando funzionava !!! Ho istanziato e pre-gonfiato frammenti e un argo zero è stato aggiunto quando ho letto questo e ha funzionato. Chi potrei revocare questo ancora di più! –

Problemi correlati