Heilage Skrevet 4. oktober 2012 Del Skrevet 4. oktober 2012 Hepp. Fant ikke noe bedre sted å poste dette, men siden Android kjører Java er det vel relativt godt plassert. I tillegg kan det være nyttig å finne ut av generelt i Java. Så, her er utgangspunktet. Et program har en masse klasser for å gjøre ting. På et punkt skal brukeren velge hvilken funksjon han skal bruke, og man må begynne å kjøre ting inne i denne klassen. I android er alt basert på aktivititerer, som kjøres slik: Intent intent = new Intent(this, Klassenavn.class); startActivity(intent); Nøkkelen her er "Klassenavn.class". Jeg vil gjerne bytte ut Klassenavn med en variabel (jeg har en metode som henter klassenavnet fra en String). Dersom jeg får til dette, trenger jeg ikke å bruke endeløse if/else-trær for å avgjøre hvilke funksjoner som skal kjøre, men heller bare be programmet om å starte en aktivitet basert på klassenavnet som står i Stringen. Hittil har jeg forsøkt litt med ForName-metoden som står nevnt her: http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html Men jeg får ClassNotFoundException selv om jeg eksplisitt nevner en klasse jeg vet eksisterer i programmet mitt. Det er mulig jeg misforstår noe, men litt hjelp hadde vært kjekt. Lenke til kommentar
HV Skrevet 4. oktober 2012 Del Skrevet 4. oktober 2012 Test dette: final String className = Klassenavn.class.getName(); final Class clazz = Class.forName(className); Intent intent = new Intent(this, clazz); Hvis dette virker har du sleivet på noe alle pakkenavn eller noe. Lenke til kommentar
Heilage Skrevet 4. oktober 2012 Forfatter Del Skrevet 4. oktober 2012 (endret) Problemet er jo at jeg ikke vet klassenavnet i utgangspunktet. Det er bare en streng som er identisk med navnet til .java-filen. Men sånn sett burde vel final Class clazz = Class.forName(getmetodesomgirmegstringen); funke? EDIT: Forsøkte både med med metoden over og metoden du nevnte med en klasse jeg kjenner navnet til. Får fortsatt ClassNotFoundException. Endret 4. oktober 2012 av Heilage Lenke til kommentar
Kiff Skrevet 4. oktober 2012 Del Skrevet 4. oktober 2012 (endret) Det burde funke, men husk at du må ha med hele pakkenavnet f.eks "min.pakke.KlasseSomSkalLastes" (I tillegg må klassen være synlig for classloaderen som brukes. Hvis ikke må du lage en ny classloader, legge til .class filen i pathen der og bruke den for å laste klassen) Endret 4. oktober 2012 av Kiff Lenke til kommentar
Matsemann Skrevet 8. oktober 2012 Del Skrevet 8. oktober 2012 Om du har på forhånd definerte klasser og ikke så mange, kan du lage en map som mapper key til class, og slå opp der på key. Lenke til kommentar
droidy Skrevet 9. oktober 2012 Del Skrevet 9. oktober 2012 ..og klassen ligger i manifest-fila går jeg utifra? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå