0

パッケージ名を使用して特定のアプリケーションを開こうとしています。このコードを使用:try/catchブロックがある場合でも、 'boolean android.content.Intent.migrateExtraStreamToClipData()'がnullオブジェクト参照にクラッシュするアプリケーション

public void openAppHavingPackageName(String packageName, String appName) { 
     try { 
      Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName); 
      startActivity(intent); 
     } catch (ActivityNotFoundException e) { 
      Log.e(TAG, e.getMessage()); 
     } 
} 
それは私が私の携帯電話にインストールされたアプリを開くしようとしている時に正常に動作しているが、私は自分の携帯電話にないアプリを開こうとしたときに、アプリはこれを与えて墜落した

エラー:行01の

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

startActivity(intent);

あなたは例外が巻き込まれず、代わりにコードがクラッシュを引き起こして実行を取得している理由は、私はそこtry/catchブロックを持って見ることができるように?

答えて

3

NullPointerExceptioncatchの範囲に入力しないと、try catchブロックにキャッチすることができません。それは、代わりにtry catchブロックで扱うのは、それを避けるために推奨される実行時例外です:

:あなたのコードで

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

NullPointerException例外を処理するために、あなたはこれを行う必要があります

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

もう一度、この方法はお勧めしません。

関連する問題