初心者。今日、明示的なインテントを使用してアクティビティ間をジャンプするコードを作成しましたが、クラス内でインテントのメンバー変数を定義し、それをメソッドで使用するとプログラムがクラッシュしました。これはなぜですか?
リーリーコードは上記の通りですが、エラーメッセージは次のとおりです:
原因: java.lang.NullPointerException: 仮想メソッド「java.lang.String android.content.Context.getPackageName()」を呼び出そうとしました null オブジェクト参照
「null オブジェクト参照」で getPackageName() 仮想メソッドを呼び出すときにエラーが発生したと言われています。
最初は、これが空で問題が発生しているのではないかと思い、コードを変更しました:
リーリーしかし、エラーは依然として発生し、エラーメッセージは同じままです。条件判断により、これが空ではないことはわかっていますが、それでも null 参照と言われるのはなぜですか?
リーリーActivity
是ContextWrapper
的子类, 所以我们先找到并打开ContextWrapper.java
ソースコード、キーコードは次のとおりです:
リーリーContextWrapper
里基于Context
的调用都是直接使用mBase
来间接实现调用的. 那么这个mBase
是什么时候被赋值的呢? 找到并打开ActivityThread.java
、キーコードが割り当てられているコード部分を見つけることができます:上記のことから、以下のことがわかります:
Activity
时,ContextWrapper#getBaseContext()
返回的是null, 因此, 不能在构造函数或者构造成员变量时直接调用与Context
に関連する関数とクラスをインスタンス化して、必要に応じてライフサイクル関数で呼び出します。クラスはアクティビティ クラスを継承し、ライフ サイクルがあり、すべてのロジックはこれらのライフ サイクルで実行されます。つまり、一般に、ロジック コードはそれらのライフ サイクルのメソッドで記述される必要があります。 onCreate メソッドとそこにページを書き込むと、メソッドの識別子の命名も標準化されていません
。onCreate() メソッドをオーバーライドする必要があります