質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2468閲覧

SharedPreferencesとAlertDialogを組み合わせるとNullPointerException

mop

総合スコア14

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/01/12 06:47

SharedPreferencesで保存、読み込み処理のプログラムを実機でテストしていた所、一度保存した値をgetInt()等で読み込むと、NullPointerExceptionが発生します。
結果例外処理のcatchに書いてある通りNotFoundとボタンにテキストがセットされます。

lang

1//保存処理 2SharedPreferences pref1; 3pref1 = getSharedPreferences("save1", MODE_PRIVATE); 4 Editor s1 = pref1.edit(); 5 s1.putString("現在時刻", date1); 6 s1.commit(); 7 8//読み込み処理 9 10 SharedPreferences pref1 = getSharedPreferences("save1", MODE_PRIVATE); 11 date1 = pref1.getString("現在時刻", date1);

以下のコードはダイアログを開いて読み込み処理をしており、値が保存されている場合に保存時刻をButtonにセットしています。最初にbuilder = nullを行っているのは、二度ダイアログを同じ場所に開くと違う例外が発せしてしまうため、ダイアログにnullを代入しています。

lang

1public void load(View view){ 2 builder = null; 3 builder2 = null; 4 LayoutInflater inflater = (LayoutInflater)this. 5 getSystemService(LAYOUT_INFLATER_SERVICE); 6 final View layout2 = inflater.inflate( 7 R.layout.load, (ViewGroup)findViewById(R.id.load_layout)); 8 builder2 = new AlertDialog.Builder(this); 9 builder2.setTitle("ロード"); 10 builder2.setView(layout2); 11 12 Button loadbutton1 = (Button) layout2.findViewById(R.id.loadbutton1); 13 try{ 14 loadbutton1.setText(pref1.getString("現在時刻", date1)); 15 }catch(NotFoundException e){ 16 loadbutton1.setText("NotFound"); 17 }catch(NullPointerException e){ 18 loadbutton1.setText("NotFound"); 19 } 20 builder2.create(); 21 builder2.show(); 22 }

NotFoundと表示されるのですが実際には読み込み処理を何度も行えることからファイルは存在するのでボタンには保存時刻が表示されて欲しいのですが。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

loadbutton1かpref1がnullなのだと思います。
インスタンスが取得できているか確認してください。

投稿2015/01/13 07:30

omochi

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mop

2015/01/13 07:58

AlertDialogの生成の仕方に問題があると思い、自分が凡ミスしていたことに気がつきませんでした。 読み込み処理を行う際に何故かpref1 = nullを実行していたことに気がつきませんでした。 こんなことで質問してしまい反省しています。 解答ありがとう御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問