2012-01-03 5 views
0

J'ai rencontré des problèmes lors de la lecture d'un fichier XML dans mon dossier "res" et je pense que je l'ai réduit à un problème lié à l'activité de mes applications.Obtenir l'activité pour mon application

Je continue à obtenir un NullPointerException en ligne 2 ci-dessous.

Voici mon code pour obtenir l'activité. Y a-t-il une meilleure ou une bonne façon de faire cela?

1. Activity activity = this; 

2. Resources res = activity.getResources(); 

3. XmlResourceParser xpp = res.getXml(R.xml.encounters); 

Voici la classe:

public class XmlParser extends Activity { 


public XmlParser() 
    throws XmlPullParserException, IOException 
{ 
    try { 
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setValidating(false); 

     Activity activity = this; 
     Resources res = activity.getResources(); 
     XmlResourceParser xpp = res.getXml(R.xml.encounters); 

    } catch (Exception e) { 
     String stackTrace = Log.getStackTraceString(e); 
     Log.e("error", stackTrace); 
    } 
    } 
} 

Et je me fais l'erreur sur les "ressources res = activity.getResources();" line ... Merci!

+2

Qu'est-ce 'this'? –

+0

Je pensais que cela se réfère à l'application? Je pense que je me trompe? – SkyeBoniwell

+1

@ 999cm999 Malheureusement, 'this' fait référence à l'instance de la classe dans laquelle le code est en cours d'exécution. Vous avez vraiment besoin de poster plus de code pour nous permettre de comprendre ce qui se passe. –

Répondre

3

Quelque chose me dit qu'il y a un problème avec this ou activity et il manque du code ici. Le code que vous avez mis là ne devrait jamais générer un NPE parce que this n'est jamais nul et si 2 suivait 1 immédiatement, activity ne devrait pas être nul. Il est possible que this ne soit pas une instance de Activity mais cela générerait une erreur de compilation, pas un NPE.

Modifier Ah, je pense que je vois votre problème. Vous devez remplacer onCreate() et ce Activity sera instancié par le cadre Android. Vous devez ensuite déplacer tout le code du constructeur et le placer dans la méthode onCreate(). Cependant, je pense que cela est indicatif d'une compréhension fondamentale de la façon dont les applications fonctionnent sous Android. Au lieu de cela, ce que je ferais est de créer une application Android standard dans Eclipse. Cela va créer une activité de base pour vous. À partir de là, supprimez le sous-classement Activity de votre classe XmlParser et modifiez le constructeur pour qu'il prenne un argument Context. De là, instancier le XmlParser dans votre autre Activity, celui qui a été créé par Eclipse.

Tout cela dit, je pense que vous devriez passer un peu de temps à lire sur les principes fondamentaux de l'application des développeurs docs de comprendre comment vous êtes censé avoir accès aux ressources, etc.

Edit 2 Pour plus d'informations sur Activities consultez this link. En outre, consultez this SO post for how to do what you're trying to do.

+0

J'ai ajouté la classe à ma question principale ci-dessus ... merci – SkyeBoniwell

+0

wow, qui a volé au-dessus de ma tête. J'ai lu la documentation sur 'http://developer.android.com'. Y at-il quelque chose qui pourrait aider à expliquer ce que vous avez écrit ci-dessus? - merci – SkyeBoniwell

+0

génial Chris, merci! – SkyeBoniwell

1

Si vous exécutez ce code à l'intérieur d'une classe d'activité, vous pouvez simplement faire:

Resources res = this.getResources(); 

XmlResourceParser xpp = res.getXml(R.xml.encounters); 
Questions connexes