5

ここに興味深いものがあります...

Android 2.3.3以降を実行しているデバイス用に作成しているアプリケーションがあります。

Intent を介してカメラを呼び出すメイン アクティビティがあります。

ユーザーがボタンをクリックしてカメラを起動した場合。次に写真を撮ります。次に、[完了] をクリックしてメイン アクティビティに戻ります。アプリケーションは正常に動作し、メイン アクティビティのイメージビューに新しい画像が表示されます。

ただし、ユーザーがメイン アクティビティを縦向きで使用する場合。次に、ボタンをクリックしてカメラ インテントを開き、向きを横向きに変更します。次に、[完了] をクリックしてメイン アクティビティに戻ります - アプリケーションがクラッシュします

ただし、ユーザーが縦向きでメイン アクティビティを使用する場合。次に、ボタンをクリックしてカメラ インテントを開き、向きを横向きに変更します。その後、[完了] をクリックしてメイン アクティビティに戻る前に、向きを (カメラ内の) 縦向きに戻します。その後、アプリケーションは引き続き正常に実行されます。

私が試したこと:マニフェストファイルを変更して、アプリケーション(メインアクティビティ)を強制的に縦向きにしました(これも削除しました)の再描画を処理するために、この行をメインアクティビティに追加しましたその上でのアクティビティがカメラ インテントから返されます。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

デバッグ ウィンドウで、nullpointer の例外を説明するエラーが表示されます。これは、方向が残っていたときと同じでない限り、画像が渡される方向の変更後にビューが存在しなくなったためだと思います。

ちょっと行き詰まっているので、アドバイスをいただければ幸いです。

4

3 に答える 3

3

画面の向きが変わると、画面Activityが破棄され、新しい向きで再作成されます。そのため、 の有効期間中に参照を取得した変数は、Activityもはや何も参照しなくなります。その後、値を再割り当てせずに参照するオブジェクトにアクセスしようとすると、NullPointerException.

このメソッドonSaveInstanceState()は、構成変更間の一時データを保存するために使用されます。これにより、 の再起動onCreate()時に渡される Bundle が作成されます。Activity

コードがなければ、それがあなたの問題かどうかはわかりませんが、一見の価値があります。

詳細については、 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChangesを参照してください (間違いなく、私が提供したよりも正確な情報です)。

于 2012-06-21T11:35:08.203 に答える
1

ちょっとわかりませんが、このプロパティをマニフェストファイルに入れてみてください。うまくいけばうまくいくはずです。

android:configChanges="orientation|keyboardHidden" 
于 2012-06-21T11:53:04.827 に答える
1

Samsung S3 や S4 などの一部の Android デバイスでは、デフォルトのカメラ サーフェス ビューが横向きモードになっています。カメラを呼び出して画像をキャプチャし、アプリケーションにアクセスすると、向きをポートレートに設定したかどうかにかかわらず、最初にランドスケープ モードで開き、次にポートレート モードに変わります。

その Android OS の動作。このアクティビティにより、それ自体が再作成されます。その時点で、Null Pointer Exception が発生しています。configChangesmenifestファイルに設定することで対応できます。

android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"

onSaveInstanceState()そして、@Spinnerが彼の答えで正しく言ったデータを一時的に保存できます。

于 2015-12-18T06:00:35.667 に答える