7

Androidアプリに関するエラーレポートがいくつかあります。これは、アクティビティのonCreate()のNullpointerexceptionです。 失敗するコードはgetIntent()。getExtras()。getStringExtra( "name")です。(Nullpointerexception)

これは、getExtras()がどういうわけかnullであることを意味します。インテントを作成するすべての場所にインテントを追加で設定していると確信しています。デバイスのエミュレータで再作成できません。アプリをもう一度開こうとした後、実際のデバイスで発生したと思います(ただし、デバッグ中は発生しませんでした)。その間に、Androidはおそらくプロセスを強制終了し、アクティビティを再作成しました。しかし、このシナリオでも意図的な追加機能を保持するべきではありませんか?

エミュレーターでプロセスを強制終了しようとしましたが、onCreateが再度呼び出され、getExtras()が正しい値を返しました。

コードをgetIntent()。getStringExtra()に置き換えました。nullpointerexceptionをスローしませんが、文字列をnullとして設定する以外の違いは何ですか。他に違いはありますか?

何が原因でしょうか?

4

3 に答える 3

8

余分なものがない場合、Intent.getStringExtra()はnullを返します。Intent.getExtras()は、余分なものがない場合はnullを返すため、getString()または他のメソッドを呼び出す前にnullを確認する必要があります。

于 2011-05-01T23:19:15.690 に答える
0

getIntent.getExtras()は、ある時点でnullを返しています。getIntent()。getStringExtra()は、nullエクストラをチェックし、getExtras()がnullの場合はnullを返すようにコーディングされている可能性があります。いわゆる「スローなし」アーキテクチャ。その場合、これは有効なランタイム実行であり、例外をスローしません。nullエクストラでgetStringExtraを呼び出すことは、有効なランタイム実行ではなく、例外をスローする必要があります。

getExtras()がnullであるパスがあるように見えるので、nullエクストラをチェックすることでこれを回避するようにコーディングできます。

于 2011-05-01T23:31:58.560 に答える
0

コードのどこかで、String[]が余分に含まれるショートカットインテントを作成していることがわかりました。Android HOME(およびシステムの他の部分)は文字列配列を許可せず、プリミティブエクストラ(int、string、long、float ...)のみを許可します。しかし、問題を引き起こしていたコードはショートカットを使用していません。それは、文字列配列を余分に受け取る単純なアクティビティにすぎません。空のエクストラもこの問題が原因である可能性があります。アプリケーションがOSによって強制終了され、エクストラを保存できませんでした。この場合、Androidによって例外はスローされません。

Romain Guyによる説明:http: //groups.google.com/group/android-developers/browse_thread/thread/7f2ce458bd5d112f/189e2b7b2b2532d7

私はここでこれについてより具体的な質問をしました: 再起動後にショートカットインテントエクストラが失われましたか?

于 2011-05-04T21:00:45.043 に答える