Problème en cours d'exécution android HelloTabWidget exemple - NullPointerException sur addTab()
J'ai essayé de la Onglet Mise en page exemple, et j'ai aussi corrigé les quelques fautes de frappe dans l'exemple (et ajouté toutes les activités pour le manifeste). Cependant, lorsque je l'exécute sur l'émulateur, je reçois un NullPointerException sur la première ligne qui dit
tabHost.addTab(spec);
Donc ma question est, bien sûr, est. Quel est le problème avec l'exemple qui serait la cause de cette exception? Je suis à l'aide d'Eclipse Galileo et de définir le package cible sous Android 1.5. Jusqu'à présent, je n'ai pas eu d'autres problèmes avec les autres exemples sur l'android dev site.
package com.example.hellotabwidget;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;
public class HelloTabWidget extends TabActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) throws RuntimeException {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); //Resource object to get Drawables
TabHost tabHost = getTabHost(); //The activity TabHost
TabHost.TabSpec spec; //Reusable TabSpec for each tab
Intent intent; //Reusable Intent for each tab
//Create an Intent to launch an Activity for the tab (to be reused)
//final Context context = getApplicationContext();
intent = new Intent().setClass(this, ArtistsActivity.class);
//Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("artists").setIndicator("Artists",
res.getDrawable(R.drawable.ic_tab_artists))
.setContent(intent);
tabHost.addTab(spec); //******** NullPointerException after running this line
//Do the same for the other tabs
intent = new Intent().setClass(this, AlbumsActivity.class);
spec = tabHost.newTabSpec("albums").setIndicator("Albums",
res.getDrawable(R.drawable.ic_tab_artists))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SongsActivity.class);
spec = tabHost.newTabSpec("songs").setIndicator("Songs",
res.getDrawable(R.drawable.ic_tab_artists))
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTabByTag("artists");
}
}
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp" />
</LinearLayout>
</TabHost>
Il n'y a pas de ligne qui dit
Oups, c'était une faute de frappe dans ce post, pas dans mon code. J'ai mis à jour ma question et publié plus de code.
J'ai revisité ce problème et a trouvé qu'il fixe lui-même. Il doit de fait d'un bug dans le SDK parce que j'ai ouvert le projet mois plus tard et il a fonctionné sans problèmes.
J'ai eu le même problème - vérifiez votre émulateur de configuration et si elle est attachée à débogueur.
tabHost.setTab(spec);
, en grande partie parce qu'il n'y a pas de setTab()
méthode utilisée dans cet exemple. En fait, je ne peux pas en trouver un dans le SDK Android en général.Oups, c'était une faute de frappe dans ce post, pas dans mon code. J'ai mis à jour ma question et publié plus de code.
J'ai revisité ce problème et a trouvé qu'il fixe lui-même. Il doit de fait d'un bug dans le SDK parce que j'ai ouvert le projet mois plus tard et il a fonctionné sans problèmes.
J'ai eu le même problème - vérifiez votre émulateur de configuration et si elle est attachée à débogueur.
OriginalL'auteur poindextrose | 2010-02-21
Vous devez vous connecter pour publier un commentaire.
Essayer dans votre manifeste:
OriginalL'auteur Ngetha
Veux juste dire merci à tous qui a posté ici. Résolu mon problème (comme tout le monde ici). C'était très frustrant pour obtenir que cela fonctionne. Ils doivent avoir vraiment simplifié la exemple beaucoup mieux.
Essaie de résumer les changements nécessaires.
Déplacer tous les 3 classes d'activité, dans des fichiers séparés.
exemple j'ai utilisé pour mon SongsActivity.java fichier (avec eclipse erreur suggestions)
OriginalL'auteur ray
J'ai eu le même problème.
J'ai commencé les tutoriels hier et cela a été le seul à avoir des problèmes.
Le pointeur null est renvoyée à cette ligne la première fois de son nom
activer le correctif a été dans le manifeste XML
les deux dernières activités n'étaient pas présents avant, et il serait un échec. J'ai ajouté (grâce à Ngethala suggestion ci-dessus!) et il a parfaitement fonctionné.
Pour le tutoriel de l'exemple lui-même, il serait les trois artistes, des albums, des chansons et des activités que vous auriez besoin d'ajouter
Je suppose que j'ai appris que chaque activité doit être indiquée dans le manifeste, n'a de sens que je n'avais pas penser à elle tout en suivant l'exemple de la T.
Est-il vrai que c'est le cas? toutes les activités doivent être dans le manifeste?
OriginalL'auteur Cameron
Hey les étapes suivantes et je suis sûr que votre problème va:-
Créer une classe HelloTabWidget.java
Créer votre deuxième activité: ArtistActivity.java
Créer votre troisième activité: AlbumsActivity.java
Créer votre quatrième activité: SongsActivity.java
Faire un dossier dans res/drawable
Dans ce dossier, faire 3 fichiers XML:
le code de ces fichiers comme ceci:-
Dans le code XML ci-dessus, nous utilisons deux images suivantes sont des images qui doivent être enregistrer dans le même dossier (res/drawable).
C'est le main.xml:
C'est AdroidManifest:
Je pense que c'toutes les informations de l'aide, si vous avez un problème alors libre de me demander quoi que ce soit. Je suis toujours heureux d'aider tout le monde.
OriginalL'auteur Pushpendra Kuntal
Vous devez poster un peu plus de code, de sorte que nous pouvons prendre de meilleures hypothèses. Surtout assurez-vous d'instancier la tabHost quelque part.
En regardant le code, je ne vois pas ce qui est mal. Pourriez-vous poster le stracktrace de l'exception?
Il n'y a pas de stacktrace sur l'exception, ni un message détaillé. En cliquant sur stackState champ donne ça: 'JDI fil d'évaluations a rencontré un problème. Traitement d'Exception async fil de la file d'attente. Puis Détails >> montre: traitement d'Exception async fil de la file d'attente de traitement des exceptions, async fil de la file d'attente org.eclipse.jdt.interne.debug.de base.de modèle.JDIObjectValue ne peut pas être lancé pour org.eclipse.jdt.debug.de base.IJavaArray
OriginalL'auteur Moritz
Avez vous mis votre activité dans le AndroidManifest.xml? Vous devez indiquer à l'application sur l'activité que vous voulez montrer, sinon, que vous aurez obtenu est juste une erreur.
Par exemple, vous pouvez mettre le code xml suivant à l'intérieur de la <> élément:
Espère que cela aidera.
-Surya Wijaya Madjid
OriginalL'auteur Surya Wijaya Madjid
C'est ce qui a fonctionné pour moi:
J'ai modifié cette ligne à utiliser les "artistes"
tabHost.setCurrentTabByTag("artistes");
Puis ajouté un "." devant TabAndroid(l'activité principale de nom) et ajouté les trois activités que Ngetha suggéré.
OriginalL'auteur Zeke
Je suis seulement à partir de la programmation pour Android, et j'ai rencontré ce problème, trop. Je dois dire que j'ai été assez frustré avec elle. Faire ce que Ngetha suggéré m'a aidé, mais j'ai également eu à modifier mon code un peu. Ce que j'ai remarqué, c'est qu'apparemment, le Android n'aime pas les sous-classés Activités. À tous. Je pensais que j'allais rendre mon code plus propre grâce à l'encapsulation de tout, mais c'est apparemment ce n'est pas normal. J'ai dû passer mes classes dans des fichiers séparés. J'espère que cela aide d'autres nouveaux programmeurs avec le même encapsulation problème que j'ai eu.
OriginalL'auteur Jon
J'ai eu le même câblé erreur.
Essayez Ceci:
Si vous utilisez eclipse supprimer l'erreur, changer une partie du code(si l'application est de recompiler) et il devrait fonctionner très bien.
OriginalL'auteur Lehto
Mieux, si vous vous retrouvez coincé dans de telles erreurs, essayez de Projet > Propre à régénérer automatiquement les fichiers générés.
OriginalL'auteur sazwqa
RÉSOLU je recevais nullPointerException après .addTab(spec) lors d'un retour en arrière à partir d'un lancé intention. Je n'ai pas d'erreur sur la première entrée de cette activité.
Je l'ai résolu en ajoutant:
TabHost tabHost = (TabHost) getTabHost();
tabHost.setCurrentTab(0); //ce arrêté du nullPointerException
.....
....
tabHost.addTab(spec);
OriginalL'auteur Jim
Aussi, j'ai eu de la difficulté avec l'onglet widget tutoriel.
J'ai été onyl en mesure de résoudre le problème de la lecture de ce post DONC, merci pour les réponses les gars.
Remontant vers le tutoriel.... l'android dev team pourrait améliorer leur documentation.
Ils ne enfait dites-nous d'ajouter le XML activités pour le manifeste, ils ont juste ne pas préciser qu'il est très bien.. voici la citation:
OriginalL'auteur masta