DialogFragment: NullPointerException (bibliothèque de support)

J'utilise l'excellente bibliothèque ACRA pour recevoir des rapports d'erreur de mes applications.

Je reçois beaucoup de rapports de clients concernant un NPE dans DialogFragment, mais je ne peux pas le reproduire:

  • Comment supprimer un fragment spécifique de la pile arrière dans Android
  • AdWhirl provoquant java.lang.NullPointerException après le réseau d'arrêt
  • Comment accéder à la vue d'activité parentale dans Fragment
  • Une disposition invisible derrière le fragment est cliquée:
  • FragmentManager.getFragmens (). Size () ne diminuent pas après FragmentTransaction.remove (Fragment)
  • Erreurs exécutant le générateur 'Gestionnaire de ressources Android' sur ADT
  • java.lang.NullPointerException at android.support.v4.app.DialogFragment.onActivityCreated(SourceFile:366) at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:892) at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1083) at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1065) at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(SourceFile:1844) at android.support.v4.app.FragmentActivity.onStart(SourceFile:519) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133) at android.app.Activity.performStart(Activity.java:4475) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) at android.app.ActivityThread.access$600(ActivityThread.java:123) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) 

    Le NPE se produit dans la bibliothèque de support (@line 366):

     353 @Override 354 public void onActivityCreated(Bundle savedInstanceState) { (...) 361 View view = getView(); 362 if (view != null) { 363 if (view.getParent() != null) { 364 throw new IllegalStateException("DialogFragment can not be attached to a container view"); 365 } 366 mDialog.setContentView(view); 367 } 

    Im impossible de reproduire le problème sur l'un de mes appareils (du 2.2 au 4.1.1). Puisqu'il n'y a aucune référence à l'un de mes codes, est-ce un bug de bibliothèque?

  • Comment puis-je désactiver les contrôles d'annotation Android @IntDef dans des cas particuliers?
  • RecyclerVisitez les objets avec un grand espace vide après 23.2.0
  • Transitions d'activité Android utilisant Support v4 à jour avec Android L
  • Android-support-v4.jar n'est pas importé correctement dans Eclipse
  • Veuillez installer le paquet: 'Android Support Library'
  • Android Dex: Impossible d'exécuter DX
  • 4 Solutions collect form web for “DialogFragment: NullPointerException (bibliothèque de support)”

    J'ai dû débarquer le même problème dans un projet.

    Typiquement, le fragment de dialogue est utilisé comme ci-dessous

     @Override public Dialog onCreateDialog (Bundle savedInstanceState) { //Create custom dialog return dialog; } 

    Essayez de le mettre à jour à la suite

     @Override public Dialog onCreateDialog (Bundle savedInstanceState) { //Create custom dialog if (dialog == null) super.setShowsDialog (false); return dialog; } 

    Cela empêchera DialogFragment.onAtivityCreated () d'exécuter des méthodes sur la variable null member mDialog.

    Il s'agit d'un accident relativement courant que j'ai vu signalé dans StackOverflow, et c'est parce que la boîte de dialogue n'est pas créée correctement, ce qui provoque la neutralité de mDialog. La méthode de la force brute que j'ai initialement utilisé pour empêcher le crash:

     @Override public void onActivityCreated(Bundle arg0) { if (getDialog() == null ) { // Returns mDialog // Tells DialogFragment to not use the fragment as a dialog, and so won't try to use mDialog setShowsDialog( false ); } super.onActivityCreated(arg0); // Will now complete and not crash 

    }

    Alors que ce qui précède est probablement mieux qu'un accident, cela ne répond pas à la cause principale de la raison pour laquelle la boîte de dialogue n'a pas été créée. Il pourrait y avoir plusieurs raisons à cela et c'est ce qui doit être débogué.

    Dans ma situation, j'ai constaté que je devais mettre en ligne OnCreateDialog de DialogFragment () au lieu de onCreateView () pour créer correctement la boîte de dialogue 100% du temps. (OnCreateView () fonctionne presque toujours pour créer la boîte de dialogue, mais j'ai PROMÉTRE qu'il existe des cas de coin reproductibles où onCreateView () ne fonctionne pas, ce qui amène le mDialog à devenir nul. D'autre part, j'ai toujours trouvé que onCreateDialog () créé correctement DialogFragment's dialogue.)

    J'avais le NPE.

    Mais entourant le super.OnActivityCreated avec un try/catch n'a pas aidé.

    Ce qui a aidé, c'était la suppression d'un champ statique qui a été laissé de copier un exemple. Donc, pas de champs statiques dans un DialogFragment surchargé.

    Non ce n'est pas. C'est l'erreur courante si SetContentView tombe en panne. SetContentView appelle les constructeurs des contrôles de votre vue. On a lancé nullPointerException.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.