2010-06-08 9 views
1

Je ne peux pas comprendre pourquoi je reçois une exception NullPointerException.Dialogue personnalisé Android NullPointerException

Lorsqu'un utilisateur clique sur une image particulière, une fenêtre de dialogue est censé pop-up et afficher une version plus grande de ladite image:

private OnClickListener coverListener = new OnClickListener() 
{ 
public void onClick(View v) 
{ 
    showDialog(DIALOG_COVER); 
} 
}; 

DIALOG_COVER est réglé sur = 0.

Le associé onCreateDialog ressemble à ceci:

protected Dialog onCreateDialog(int id) { 
Dialog dialog; 
switch(id) 
{ 
    case DIALOG_COVER: 
    dialog = new Dialog(mContext); 
    dialog.setContentView(R.layout.cover_dialog); 
    dialog.setTitle(book.getTitle()); 
    ImageView coverLarge = (ImageView)findViewById(R.id.coverLarge); 
    coverLarge.setImageBitmap(book.getCover()); 
     break; 
    default: 
     dialog = null; 
} 
return dialog; 
} 

Pour référence, c'est cover_dialog.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/coverDialog" 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="10dp"> 
<ImageView android:id="@+id/coverLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:scaleType="fitStart" 
      /></LinearLayout> 

Maintenant, lorsque l'image décrite précédemment est cliqué, l'application se bloque immédiatement et jette l'erreur suivante par LogCat:

06-08 13:29:17.727: ERROR/AndroidRuntime(2220): Uncaught handler: thread main exiting  due to uncaught exception 
06-08 13:29:17.757: ERROR/AndroidRuntime(2220): java.lang.NullPointerException 
06-08 13:29:17.757: ERROR/AndroidRuntime(2220):  at org.kylehughes.android.brarian.AndroidBrarian.onCreateDialog(AndroidBrarian.java:259) 

La ligne en question fait référence à cette ligne intérieure de onCreateDialog:

coverLarge.setImageBitmap(book.getCover()); 

Fondamentalement, je ne comprends pas pourquoi coverLarge est nul à ce point. Toute aide serait très appréciée.

Répondre

2

Que pensez vous de:

/** snip **/ 
LayoutInflater factory = LayoutInflater.from(mContext); 
View dialogView = factory.inflate(R.layout.cover_dialog,null); 
ImageView coverLarge = (ImageView)dialogView.findViewById(R.id.coverLarge); 
dialog = new Dialog(mContext); 
dialog.setContentView(dialogView); 
dialog.setTitle(book.getTitle()); 
coverLarge.setImageBitmap(book.getCover()); 
/** snip **/ 

juste écrit à partir de zéro. S'il vous plaît vérifier la syntaxe

+0

Fondamentalement, je suis à la recherche de la référence R.id.coverLarge dans le dialogue alors que vous le cherchez dans la vue d'activité –

+0

Vous monsieur m'a juste sauvé beaucoup plus d'heures de frustration. Merci beaucoup. –

0

Ce

(ImageView)findViewById(R.id.coverLarge); 

retourne une valeur null. Vous pouvez transmettre une chaîne d'identification non valide/malformée à la méthode findViewById. Avez-vous vérifié (débogué) à quoi ressemble cette chaîne avant d'obtenir le NPE?

+0

C'est juste un très long nombre en ligne avec le reste des ID dans mon application. –

0

Est-il possible que vous ayez un fichier xml différent définissant le même ID (coverLarge) pour un type différent de View (disons un bouton)? Notez également que l'ID que vous utilisez pour configurer la boîte de dialogue est cover_dialog mais que le fichier XML contient coverDialog

+0

coverDialog représente LinearLayout à l'intérieur de cover_dialog.xml. Et j'ai essayé de renommer ImageView pour quelque chose de complètement ridicule (et tous les endroits où il est référencé) et j'ai toujours la même erreur. –

0

Il se passe quelques choses à cette ligne que certaines sorties de débogage pourraient aider. Je commencerais par System.out.println 'ing les valeurs de coverLarge et book immédiatement avant la ligne incriminée. Je sais qu'ils ne devraient pas être nuls, mais cela ne ferait pas de mal de les exclure.

+0

Oh oui, et après avoir fait cela, capturez la valeur de book.getCover() et imprimez-le aussi. Encore une fois, juste pour être sûr. – Josh

+0

coverLarge est null, et book.getCover renvoie les adresses à leurs objets respectifs. –

Questions connexes