環境
- Mac OS Catalina10.15.2
- Android Studio 3.6.3
実現したいこと
別プロジェクトで機能しているコードを新プロジェクトに移植し、正常に動作させること。
別プロジェクト、新規プロジェクト共に、動作環境は全て同じ、、、、に揃えたはずです。。。
発生している問題・エラーメッセージ
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
移植した新プロジェクトで、android.content.Context.getSharedPreferencesがnullを参照する。
その結果、アプリ実行時にクラッシュが発生してしまう。
該当のソースコード
別プロジェクト、新プロジェクトもコードは以下の通り同様です。
Java
1クラス名 exa = (クラス名) クラス名.getInstance(); 2return exa.getSharedPreferences("settings", Context.MODE_PRIVATE);
試したこと
- exa = クラス名.getInstance() が null を返していないことを確認
- 別プロジェクトの場合
Debugger で起動、ブレークポイント貼って確認。
「 クラス名@11181 」という名称が exa に代入されていた。
- 新しいプロジェクトの場合
Debugger で起動、同様に確認。
「 クラス名@14102 」という名称が exa に代入されていた。
1と2から、インスタンス化は成功していると判断した。
- 呼ばれている、 getSharedPreferences() に原因があるか確認
- 別プロジェクトの場合
Debugger の Watches で、直接以下をコピペして確認。
java
1クラス名.getInstance().getSharedPreferences("settings", Context.MODE_PRIVATE);
エラーは返っていない。
2. 新プロジェクトの場合
Debugger の Watches で同様に確認。
java
1Method threw 'java.lang.NullPointerException` exception
が返っている。
やはり、エラー通り、 getSharedPreferences メソッドがおかしいと判断した。
調査中
getSharedPreferences メソッドについて調査しています。
このメソッドは、以下のパスにあり、メソッドが間違っているとは言えないのでは?と仮説を立てています。
terminal
1/~/root/Library/Android/sdk/sources/android-29/android/content/ContextWrapper.java
その上で、getSharedPreferences()の第一引数に指定している settings が間違っているのでは無いかと推測して、調査を行なっております。
が、私ごとで恐縮なのですが、時間に余裕がありません。。
故に、ご存知のお方に何かご助言いただければと思っております。
返答に注文をつけるわけでは無いのですが、
「方針は合っているから、そのまま調べた方が勉強になるからがんばれ」等でも結構です。
よろしくお願いいたします????♂️
現在、この辺りを調査中です↓
https://qiita.com/ryo_mm2d/items/b90dbbd726183c20c14c
あなたの回答
tips
プレビュー