2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アプリの旧バージョンで設定したものをgetPreferences()で取得できない問題

Last updated at Posted at 2013-11-24

開発中のアプリをバージョンアップテストしたら、なぜか同じ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)

に変えただけ

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?