0

J'essaie d'ouvrir certaines applications en utilisant des noms de paquets et pour cela je suis en utilisant ce code:App s'écraser avec 'boolean android.content.Intent.migrateExtraStreamToClipData()' sur une référence d'objet null 'même lorsque try/catch block est là

public void openAppHavingPackageName(String packageName, String appName) { 
     try { 
      Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName); 
      startActivity(intent); 
     } catch (ActivityNotFoundException e) { 
      Log.e(TAG, e.getMessage()); 
     } 
} 

Il fonctionne bien quand je suis en train d'ouvrir les applications qui sont installées dans mon téléphone, mais quand j'ai essayé d'ouvrir une application qui n'est pas mon téléphone, l'application est écrasé donnant cette erreur:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference

sur la ligne

startActivity(intent);

Comme vous pouvez le voir, j'ai un bloc il try/catch alors pourquoi l'exception ne se faire prendre et place le code devient provoquant le crash course?

Répondre

3

NullPointerException ne peut pas être attraper dans un bloc try catch s'il n'est pas inplicited dans la plage catch. Il est une exception à l'exécution, ce qui est recommandé pour l'éviter, au lieu de traiter dans un bloc try catch:

if(something != null) { 
    doStuff(); 
} 

Dans votre code, pour gérer l'exception NullPointerException, vous devez faire ceci:

try { 
    Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName); 
    startActivity(intent); 
} catch (ActivityNotFoundException | NullPointerException e) { 
    Log.e(TAG, e.getMessage()); 
} 

Mais encore une fois, ce n'est pas la méthode recommandée.