0

J'essaie actuellement de déboguer mon application Android. J'ai construit le premier écran et il utilise un hôte Tab. J'avais apporté quelques modifications mineures à TabHost pour ajouter quelques méthodes supplémentaires (source complète à suivre) pour travailler avec d'autres parties de mon application.Exception de pointeur nul en cas de gonflage à partir de XML (sans utiliser TabActivity)

Cependant, lorsque j'essaie d'exécuter ce qui suit, j'obtiens une exception de pointeur nul sur Inflate et cela ne me dit pas vraiment pourquoi. J'ai téléchargé la source Android complète pour mon SDK et je l'ai ajouté en eclipse pour passer à travers le processus d'inflation et de trouver si je pouvais obtenir plus d'informations sur l'erreur de cette façon.

J'ai trouvé exactement quelle ligne causait l'erreur (source incluse ci-dessous) mais en passant par le débogueur quelque chose d'étrange est arrivé. La logique est un cas if/else où if == true devrait retourner un nouvel objet Parser(), j'ai couru ce code et il a passé avec succès le constructeur de Parser, mais après le retour de cela, l'instruction suivante est sortie de le groupe de déclaration à la ligne ci-dessous retournant null. Le constructeur semble avoir fonctionné correctement (il se trouve dans XmlBlock.java au cas où vous vous le demanderiez) mais il continue de passer à la ligne suivante et retourne null et je ne sais pas pourquoi c'est le cas. J'ai recherché des solutions mais jusqu'ici le seul problème semblable a été rencontré par quelqu'un utilisant un TabActivity qui n'est pas approprié à mon application. J'ai besoin que les onglets et leurs vues soient générés par les objets que j'ai définis dans mon projet (similaires aux contrôleurs de vue de style IOS) et non par des processus séparés en utilisant Intents pour lancer de nouvelles activités. Est-ce que quelqu'un peut jeter un oeil à ma source et me dire ce que je fais mal ici parce que personne d'autre ne peut me dire quel est le problème? Voici un autre lien direct vers la source concernée: http://pastebin.com/9VRE2UGW

+0

Si vous "ajoutez quelques méthodes supplémentaires" à votre activité pour "travailler avec d'autres parties de votre application", cela donne l'impression que vous faites quelque chose de mal. – Falmarri

+0

Je n'aime vraiment pas comment Dieu genre Android/classe tout dans les activités, qui mélangent l'interface utilisateur et la logique du contrôleur un peu. Je préférais les objets ViewController de style IOS de séparation plus propre fournis. J'ai donc conçu mon application autour d'eux. Ce n'était pas trop difficile de lancer une bonne classe de base de VC et de travailler à partir de là. Je suis déjà sur ces problèmes initiaux et maintenant déjà sur un travail plus important, le portage de mon CSV à l'analyseur SQLite d'Objective-C à Java. – Fallout2man

Répondre

1

Bon, eh bien, il ressemble à mon vrai problème ici était que je ne regardais pas dans la perspective DDMS Android pour mes informations de débogage. J'avais initialement pensé que la perspective Java Debug me donnerait toutes les informations nécessaires. La véritable cause de cette exception était ailleurs dans le programme. Maintenant que je lis le logcat, je devrais être capable de résoudre tout le reste par moi-même puisque c'était mon vrai problème (information inadéquate).

+0

Juste pensé que je laisserais un commentaire ici au cas où quelqu'un voulait savoir ce que l'erreur REAL était. J'ai oublié d'appeler TabHost.setup() après avoir gonflé ma vue. L'exemple que j'avais vu utilisait une TabActivity (c'est pourquoi j'ai spécifiquement mentionné ici que je n'en utilisais pas.Dans certains cas, vous devez appeler manuellement TabHost.setup() après l'initialisation et d'autres pas. Je n'étais pas au courant de cela avant et cela générait des exceptions de pointeur Null lorsque j'ai essayé d'ajouter des onglets parce que le widget Tab n'était pas correctement assigné dans les propriétés de TabHost. – Fallout2man

0

Je soupçonne que cette ligne est erroné:

TabBarController UITabBarController = 
    (TabBarController)interfaceBuilder.inflate(R.layout.tab_bar , null); 

Parce que votre R.layout.tab_bar représente un TabHost:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@android:id/tabhost"> 
     <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
       <TabWidget 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:id="@android:id/tabs" 
       android:layout_alignParentBottom="true" /> 

       <FrameLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:id="@android:id/tabcontent"> 
       </FrameLayout> 
     </RelativeLayout> 
</TabHost> 
+0

Ok, merci, en fait oublié de mettre à jour ce tag. Cela a été remplacé par le nom de classe Java correct entièrement qualifié. Ça ne marche toujours pas. J'ai essayé d'utiliser une route différente et de faire View.inflate() à la place, mais maintenant je reçois des exceptions ClassNotFound. Une raison pour laquelle le ClassLoader ne parvient pas à trouver une classe donnée à l'exécution que le compilateur n'a eu aucun problème à trouver lors de la compilation? – Fallout2man