9

私のアプリでは、スプラッシュ スクリーンを追加し、スプラッシュ アクティビティを作成して、マニフェスト ファイルに適切な変更を加えました。ただし、アプリを実行すると、割り当てられた時間だけスプラッシュ スクリーンが表示され、NullPointerException が返されます。問題の原因は

 intent.getAction()

スプラッシュのリダイレクト先のクラスの 241 行目で、intent.getAction() が null を返しています。アクションは、指定されたアクティビティのマニフェスト ファイルから取得されると理解しています。それは正しいですよね?もしそうなら、誰かがこれを見て、私が何かを盗聴していないかどうかを確認できますか? 私は何も間違っていないと思います。

 <activity android:name=".Main"
              android:label="@string/app_name">       

    </activity>

   <activity android:name=".SplashActivity" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">

            <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
            <action android:name="android.intent.action.GET_CONTENT" />

            <data android:mimeType="*/*" />
            <category android:name="android.intent.category.OPENABLE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

__ _ __ _ __ _アクションを取得する If ステートメント_ __ _ _ _ _ ____

 Intent intent = getIntent();

    System.out.println("Intent action is " + intent.getAction());
    if(intent.getAction().equals(Intent.ACTION_GET_CONTENT)) {
        bimg[5].setVisibility(View.GONE);
        mReturnIntent = true;
 } else if (intent.getAction().equals(ACTION_WIDGET)) {
        Log.e("MAIN", "Widget action, string = " + intent.getExtras().getString("folder"));
        mHandler.updateDirectory(mFileMag.getNextDir(intent.getExtras().getString("folder"), true));

    }
}
4

1 に答える 1

23

アクションは、アクティビティを開始したインテントから取得されます。マニフェストインテントフィルターは、そのアクティビティをターゲットとして直接指定するインテントに加えて、どの種類のインテントが一致するかを定義します。

次のようなアクティビティを開始した場合、アクションがnullになるのはまったく正常です。

startActivity(new Intent(this, MyTargetActivity.class));

インテントのアクションを指定しなかったため、アクションはありません。受信したインテントのアクションをテストするときは、次のようにチェックを逆にすると便利なことがよくあります。

if (Intent.ACTION_GET_CONTENT.equals(intent.getAction())) {
    // ...
}

定数がnullになることはないため、明示的なnullチェックの必要性を回避するためIntent.ACTION_GET_CONTENT

(このような場合、アクションチェックのいずれも一致しない場合でも、コードは妥当な処理を実行する必要があることに注意してください。)

于 2013-02-24T05:37:33.520 に答える