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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Q&A

解決済

2回答

2204閲覧

xmlファイルに保存したデータで作成したspinnerのSharedpreferences利用について

po_tato

総合スコア97

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

0グッド

0クリップ

投稿2017/08/30 01:58

編集2017/08/30 02:48

strings.xmlファイルに下記のようなリストを作成し、それを利用したspinnerを作成しました。
選択された値をsharedpreferencesで保存して、
保存された値を使用してTextviewに表示させたいのですが方法がわかりません。
具体的にはsharedpreferencesに保存までは出来ていて、
それを使用したコードの記載方法がわかりません。
sharedpreferencesから値を設定する際のデフォルト値を設定する箇所に(コード中の※の箇所)
0やspinner.setSelection(0)などを入れてみましたがエラーの連続で、、、
どなたか教えていただけませんでしょうか?
ちなみに男性で値を保存しています。

strings.xml <string-array name="list"> <item>男性</item> <item>女性</item> </string-array>
public class TestFragment extends Fragment { private Spinner spinner; private TextView Text; public TestFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_test, container, false); spinner = (Spinner) view.findViewById(R.id.spinner); Text = (TextView) view.findViewById(R.id.Text); Button save = (Button) view.findViewById(R.id.saveButton); save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { saveButtonClick(); } }); return view; } private void saveButtonClick() { SharedPreferences sp = getActivity().getSharedPreferences("Data", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putInt("SaveData", spinner.getSelectedItemPosition()); String item = (String) spinner.getSelectedItem(); ※Text.setText(sp.getInt("SaveData", spinner.setSelection(0))); editor.commit(); } }

ちなみに

※Text.setText(sp.getInt("SaveData", spinner.setSelection(0)));

このコードの場合のエラーメッセージは

Wrong 2nd argument type. Found: 'void', required: 'int' less...

getInt(String,int)
in SharedPreferences cannot be applied
to(String,void)

※Text.setText(sp.getInt("SaveData", Integer.parseInt(item)));

この場合ですと、
java.lang.NumberFormatException: Invalid int: "男性"

このように出ました。

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

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

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

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

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

yona

2017/08/30 02:01 編集

エラーが出たなら、コードとエラーログを質問に載せましょう。また、値を保存したではわかりません、具体的な値を追記してください。
guest

回答2

0

自己解決

保存方法を
editor.putInt("SaveData", spinner.getSelectedItem().toString());
とすることで保存データを使用する際も
Text.setText(sp.getString("SaveData","男性"));
このようにすることでうまくいきました。

投稿2017/08/30 09:10

po_tato

総合スコア97

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

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

0

前者はgetIntの第二引数はint型です、それに対してあなたはString型を渡しています。

後者は男性という文字列を数字に変換しようとしているので例外が発生しています。

やりたいことはプリファレンスに保存されている文字列(男性または女性)の表示ですよね?それならgetStringで値を取るべきです。

投稿2017/08/30 03:02

yona

総合スコア18155

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

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

po_tato

2017/08/30 03:24

Text.setText(sp.getString("SaveData", item)); このように変更したところ java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String このエラーログが出ました。
yona

2017/08/30 03:47

エラーメッセージについて、あなた自身は検証していますか?itemとはなんですか、どこから持ってきた値で、具体的にはどのような値ですか。 第二引数はデフォルト値です、データが無いときに使用される値です。 これをitemにする意味はなんですか?
po_tato

2017/08/30 04:49

itemはコード中に記載していると思います。 スピナーで選択した値です。この場合(男性)です。 デフォルト値なので0、あるいは"男性"など指定してみましたが出来ませんでした。 sharedprferencesに保存する際は editor.putInt("SaveData", spinner.getSelectedItemPosition()); このように指定した値をint型で設定しているのですが、 保存された値を利用するときも同じようにint型で設定しないとStringはダメだとエラーが出ると思います。 ですが、どう指定したらいいものかわかりません。。
yona

2017/08/30 05:08

intで保存したものをStringとして取り出してはダメです。 保存したものはスピナーの位置なんですね?
po_tato

2017/08/30 05:12

そうです。スピナーの位置を指定して保存しています。 0なら男性 1なら女性 といった感じです。
yona

2017/08/30 05:15

それなら、getIntで取り出す値は保存されている値(0,1)、または第二引数の値です。つまり、第二引数は0か、1が妥当ですよね。itemなんて使う必要がありません。
po_tato

2017/08/30 05:21

そう思いましたが、 Text.setText(sp.getInt("SaveData", 0)); これだと android.content.res.Resources$NotFoundException: String resource ID #0x0 このようなエラーが出ます。
yona

2017/08/30 05:37 編集

それはそうですよ、getIntで帰ってくるのは0か1です。あなたはTextViewに0か1と表示したいんですか? また、setTextにintを渡すと文字列リソースIDとして扱います。
po_tato

2017/08/30 05:41

違います。表示したいのは男性、女性などです。 Text.setText(sp.getInt("SaveData",R.array.list)); こういう感じで指定してあげるのだと思いますが、R.array.listの次の指定方法がわかりません。
yona

2017/08/30 05:54

それは違います。 R.array.listからgetIntで取得した0番目または1番目の文字を取得してTextViewに表示するんですよ。
po_tato

2017/08/30 06:10

これは違うのですか? それをやろうとして書いたのですが、違いましたか。 やり方がわからない状況です。
yona

2017/08/30 06:13

では、R.array.listから任意の位置の文字列を取り出す方法を調べてください。
po_tato

2017/08/30 06:56

String[] array_str = getResources().getStringArray(R.array.list); で配列が取得でき、array_str[0]という風にすれば男性が取得できました。 ですが、これで Text.setText(sp.getInt("SaveData", Integer.parseInt(array_str[0]))); こうすると同じようにエラーが出ました。 java.lang.NumberFormatException: Invalid int: "男性"
yona

2017/08/30 07:02

一度落ち着いてください。 勢いに任せて作っても時間の無駄ですよ。 getIntで取得した値はそのまま使うのではなく、R.array.listの要素番号として使うんですよ。
po_tato

2017/08/30 07:26

もう少し教えて頂けますか? 調べましたが、よくわかりません。。
yona

2017/08/30 09:04 編集

下記は何をやっているかわかりますか? int hoge = sp.getInt("SaveData",0); String hogehoge = array_str[hoge];
po_tato

2017/08/30 09:10

すみません。考え方を変えてみました。 そもそも保存の段階で、int型のpotisionを指定するしか方法がないと思い込んでいたのが運の尽きでした。 保存方法を editor.putInt("SaveData", spinner.getSelectedItem().toString()); とすることで保存データを使用する際も Text.setText(sp.getString("SaveData","男性")); このようにすることでうまくいきました。 何から何まで親切に対応してくださり本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問