開発中のアプリをバージョンアップテストしたら、なぜか同じkeyで設定したStringが帰ってこなくなりました。
ユーザ情報をpreferencesに保存しているため、空のユーザ情報が帰ってきて、これは困りました。
調べた結果、原因は下記の2点でした:
- getSharedPreferences()ではなくgetPreferences()を使った
- Activityのパッケージを変えた
getPrerences()の挙動
getPreferences()の中身はgetSharedPreferences()を呼び出していて、パラメータのnameにgetLocalClassName()の値を埋めています。ただし、そのまま埋めているのではなく、getPackageName()の値と比較しています。もし前方一致していれば、class nameをそのまま埋めるんですが、一致しない場合は、package prefixを残してフルネームで渡してしまいます。
しかし、getPackageName()の戻り値はActivityのpackage nameではなく、アプリのpackage nameでした。
昔のバージョンは普通にアプリのpackage = Activityのpackageでやってきたので、パラメータnameはActivityでした。そして、今回は諸事情によりActivityのpackageを変更したら、nameにActivityのフルネームを渡してしまいました。
Solution
getPreferences(mode)
のところを明示的に
getSharedPreferences("MyActivity", mode)
に変えただけ