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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

641閲覧

値からキーを取得したいが、IllegalStateExceptionが出てしまう

j06110611

総合スコア54

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2020/05/12 15:00

編集2020/05/12 15:04

やりたいこと

ListViewにチェックされた項目の値からキー名を取得

試したこと

ListViewの一番上の項目にチェックを入れ、デバッグすると、title1というキーを取得できていることが確認できた。

知りたいこと

IndexOutOfBoundsExceptionがなぜ出てしまうのかやヒント・解決策

エラー

Error

1 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 2 at java.util.ArrayList.get(ArrayList.java:411) 3 at com.test.quizmaker.MainActivity.onOptionsItemSelected(MainActivity.java:102) 4・・・

MainActivity102行目↓にエラー

if (entry.getValue().equals(data.get(i))) {

コード

MainActivity

1public class MainActivity extends AppCompatActivity { 2 private ArrayList data = new ArrayList<String>(); 3 private static final int REQUEST_CODE = 1; 4 private ArrayAdapter adapter; 5 public static int count = 1; 6 //ListView listView = (ListView) findViewById(R.id.listView); 7 ListView listView; 8 9 @Override 10 protected void onActivityResult(int request_Code, int resultCode, Intent result){ 11 switch(request_Code){ 12 //MakeQuizActivityから戻ってきた場合 13 case(REQUEST_CODE): 14 //クイズを作るボタンを押して戻ってきたときの処理 15 if(resultCode == RESULT_OK){ 16 data.add(result.getStringExtra("INPUT_TITLE")); 17 adapter.notifyDataSetChanged(); 18 } 19 //押されなかったときの処理 20 else if(resultCode == RESULT_CANCELED){ 21 22 } 23 break; 24 } 25 } 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.activity_main); 29 30 // リスト項目とListViewを対応付けるArrayAdapterを用意する 31 adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice, data); 32 listView = findViewById(R.id.listView); 33 // ListViewにArrayAdapterを設定する 34 listView.setAdapter(adapter); 35 SharedPreferences sp = getSharedPreferences("DataStore",MODE_PRIVATE); 36 SharedPreferences.Editor editor = sp.edit(); 37 PreferenceManager.init(sp,editor); 38 Button button = (Button) findViewById(R.id.makeQuiz_Button1); 39 button.setOnClickListener(new View.OnClickListener() { 40 @Override 41 public void onClick(View v) { 42 Intent intent = new Intent(MainActivity.this, com.test.quizmaker.MakeQuizActivity.class); 43 startActivityForResult(intent, REQUEST_CODE); 44 } 45 }); 46 Button button1 = (Button)findViewById(R.id.update_Button); 47 button1.setOnClickListener(new View.OnClickListener() { 48 @Override 49 public void onClick(View v) { 50 //現時点のコード 51 int updateInt = PreferenceManager.sp.getInt("count",10); 52 for(int i = 1; i<=updateInt; i++){ 53 String updateTitle = PreferenceManager.sp.getString(DataKeys.TITLE.getValue() + String.valueOf(i), "nothing"); 54 data.add(updateTitle); 55 adapter.notifyDataSetChanged(); 56 } 57 } 58 }); 59 } 60 //オプションメニューを作成 61 public boolean onCreateOptionsMenu(Menu menu){ 62 //menuにcustom_menuレイアウトを適用 63 getMenuInflater().inflate(R.menu.custom_menu, menu); 64 //オプションメニューを表示する場合はtrue 65 return true; 66 } 67 //メニュー選択時の処理 トースト表示 68 @Override 69 public boolean onOptionsItemSelected(MenuItem menuItem){ 70 //押されたメニューのIDで処理を振り分ける 71 //if(menuItem.getItemId() == R.id.menuClear){ 72 switch (menuItem.getItemId()) { 73 case R.id.menuSelect: 74 //マップの情報を取得する 75 SparseBooleanArray checked = listView.getCheckedItemPositions(); 76 77 for(int i = 0; i<checked.size(); i++) { 78 if (checked.valueAt(i)) { 79 adapter.remove(data.remove(i)); 80 adapter.notifyDataSetChanged(); 81 for (Map.Entry<String, String> entry : MakeQuizActivity.mapTitle.entrySet()) { 82 if (entry.getValue().equals(data.get(i))) { 83 //Log.d("debug",entry.getKey()); 84 System.out.println(entry.getKey()); 85 } 86 } 87 } 88 } 89 break; 90 case R.id.menuClear: 91 adapter.clear(); 92 adapter.notifyDataSetChanged(); 93 PreferenceManager.clear(); 94 count = 1; 95 break; 96 } 97 return true; 98 } 99} 100

MakeQuizActivity

1public class MakeQuizActivity extends AppCompatActivity { 2 public static Map<String,String> mapTitle; 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_make_quiz); 8 9 Button button2 = (Button)findViewById(R.id.makeQuiz_Button2); 10 button2.setOnClickListener(new View.OnClickListener() { 11 @Override 12 public void onClick(View v) { 13 Intent intent = new Intent(MakeQuizActivity.this,com.test.quizmaker.MainActivity.class); 14 String strTitle = ((EditText)findViewById(R.id.editText)).getText().toString(); 15 String strQuiz = ((EditText)findViewById(R.id.editText2)).getText().toString(); 16 String strAnswer = ((EditText)findViewById(R.id.editText3)).getText().toString(); 17 PreferenceManager.saveInt(MainActivity.count); 18 PreferenceManager.saveString(strTitle, DataKeys.TITLE, String.valueOf(MainActivity.count)); 19 mapTitle = new HashMap<>(); 20 mapTitle.put(DataKeys.TITLE.getValue() + String.valueOf(MainActivity.count),strTitle); 21 PreferenceManager.saveString(strQuiz, DataKeys.QUIZ, String.valueOf(MainActivity.count)); 22 PreferenceManager.saveString(strAnswer, DataKeys.ANSWER, String.valueOf(MainActivity.count)); 23 String title = PreferenceManager.sp.getString(DataKeys.TITLE.getValue() + String.valueOf(MainActivity.count), "Nothing"); 24 String quiz = PreferenceManager.sp.getString(DataKeys.QUIZ.getValue() + String.valueOf(MainActivity.count),"Nothing"); 25 String answer = PreferenceManager.sp.getString(DataKeys.ANSWER.getValue() + String.valueOf(MainActivity.count),"Nothing"); 26 intent.putExtra("INPUT_TITLE", title); 27 intent.putExtra("INPUT_QUIZ",quiz); 28 intent.putExtra("INPUT_ANSWER",answer); 29 MainActivity.count ++; 30 Log.v("Debug","countの値:" + String.valueOf(MainActivity.count)); 31 setResult(RESULT_OK, intent); 32 finish(); 33 } 34 }); 35 } 36} 37

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

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

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

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

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

Yasumichi

2020/05/12 15:21

ぱっと見ですが、checked.size() と data の大きさにずれが生じている可能性が考えられます。 data の最大インデックスが、 checked.size() - 1 より小さくなっているのでは?
jimbe

2020/05/12 18:43

> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 ヒントはメッセージに入っています. デバッガで見るべきは, リストの選択から例外が出るまでの中で想定した通りにコードを通り想定した通りに変数が変化しているかです. キーが取れたか程度ならログを一行入れるだけで済みます.
guest

回答1

0

ベストアンサー

i のループの中で, data.remove(i) してから data.get(i) しています.

投稿2020/05/12 18:54

jimbe

総合スコア12545

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

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

j06110611

2020/05/13 03:41

ありがとうございます!単純なところに目が届いてませんでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問