Androidアプリの開発についてお尋ねします。(Android Studio, Javaを使用) ※前回の質問の再投稿のような形で、プログラムを少し修正しています。
Androidアプリの開発についてお尋ねします。(Android Studio, Javaを使用) ※前回の質問の再投稿のような形で、プログラムを少し修正しています。 location.getSpeed()で取得した速度の値をグラフ描画したいのですが、クラッシュしてしまい、アプリケーションが動きません。 やろうとしている事としては、MPAndroidChartのLineChartを使って、速度を格納するリストを用意し、速度が変わったらリストに格納、リストの値を次々プロット、描画といった具合です。コードをここに載せたいと思います。 ※Logcatを覗くと、 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 とあり、リスト格納の部分でエラーとなっている様です。対処法がありましたら、ご回答願います。(恐らく、.addやwhile文の問題かと思うのですが・・・) loat mcurrentSpeed = 0.0f; mcurrentSpeed = location.getSpeed() * 3.6f; // 速度を取得(m/s単位をkm/h単位に変換) TextView currentspeedText = findViewById(R.id.currentspeedText); currentspeedText.setText(String.format("%.2f" + " km/h", mcurrentSpeed)); currentspeedList.add(mcurrentSpeed); LineData data2 = mChart2.getLineData(); ILineDataSet set0 = data2.getDataSetByIndex(0); if (data2 != null) { int i = 0; while (currentspeedList.size() >= 1 ) { LineDataSet set = new LineDataSet(null, labels2[0]); set.setLineWidth(2.0f); set.setColor(colors2[0]); set.setDrawCircles(false); set.setDrawValues(false); set0 = set; data2.addDataSet(set0); data2.addEntry(new Entry(set0.getEntryCount(), currentspeedList.get(i)), 0); mChart2.notifyDataSetChanged(); mChart2.setVisibleXRangeMaximum(300); mChart2.moveViewToX(data2.getEntryCount()); mChart2.invalidate(); i++; } }
ベストアンサー
【原因】 >while (currentspeedList.size() >= 1 ) { Listのサイズが1以上あればループするって意味です。 Listに要素が1個しかないときに、2周目のループに入り、要素の2個目にアクセスして落ちてると思います。 ※ IndexOutOfBoundsExceptionは、List要素数の範囲外参照で出るエラー Index: 1, Size: 1 は、要素数1個のListに対し、二番目の要素を参照したよ って意味 【解決策】 currentspeedListに入ってるLocationのスピードを折れ線グラフのデータに詰め込んでる処理ですよね?ならListの数だけループさせたいのでしょうか とすれば、ループは以下でよいかと for (int i = 0; i < currentspeedList.size(); i++) { }
回答ありがとうございます。はい、実装している機能は仰って頂いた通りです。リストの範囲外エラー という事ですね。Java,Android Studio共に、始めてから日が浅いため、エラーメッセージの意味や、while文やfor文、do-while等の繰り返し処理等、仕組みを理解しつつ 学習を進めたいと思います。
質問者からのお礼コメント
おはようございます。加速度値を取得する為の実装をヒントに、配列を 利用する様にした結果、正しいグラフ描画が出来ました。 お二方とも、ご回答頂きありがとうございました。
お礼日時:2020/11/29 10:38