お世話になっております。Android開発初心者です。
現在制作中のアプリで、グローバル変数であるArrayを使いたいのですが、addでデータの追加が出来ず、困っております。
<AndroidManifest.xml> android:name = "beginapp"
<beginapp.java> public class beginapp extends Application { public ArrayList<Integer> global_arraylist; public void setGlobal_arraylist() { global_arraylist = new ArrayList<Integer>(); } }
<該当クラスのコード> beginapp nread = new beginapp(); nread.global_arraylist = new ArrayList<Integer>(); nread.global_arraylist.add(global_id);
こちらのグローバル変数のArrayListであるglobal_arraylistに、↑
addでデータの追加がされておらず、その為、このArrayを読む際に、"IndexOutOfException"が発生しております。
原因と解決につきまして、お解りでいらっしゃいましたら、ご教授の程、宜しくお願い申し上げます。
2019/10/18 PM12:36
ログで、
Failed sending reply to debugger: Broken pipe.
こちらのエラーも出ておりまして、Clean Projectやキャッシュの削除、リビルドなども致しましたが、未だ解決しておりません、、。
2019/10/18 PM1:22
テストを進めますと、global_idの値は増えますが、やはり、global_arraylistへのデータの追加自体が出来ていないです。
2019/10/18 PM6:37
IndexOutOfExceptionが発生している原因と致しまして、初期データがintで0であることが起因しているのではないか、と思いまして、
ArrayListをIntegerで使用しておりましたが、ArrayListをStringにして、試してみようと思います。
2019/10/18 PM7:05
やっぱりダメです、どうしても、global_arraylistにaddされません。
2019/10/19 AM0:37
ご教授、誠にありがとうございます。
■1点目
beginapp nread = (beginapp) getApplication(); nread.global_arraylist = new ArrayList<String>(); receive2_st = nread.global_arraylist.get(get_id2);
get_id2は、リストビューをタップした際の場所のidです。そして、receive2_stは、ArrayListの変更後のidです。
何をしたいかと申し上げますと、リストビューで項目削除を致しました際に、削除項目を詰めたidの値を割り出したい次第です。Arrayの項目削除時に自動的に削除項目の後ろのデータを詰める性質を利用して、idの空白をなくすようにしたいです。
こちらのコードは、関数にしておりましたが、関数からグローバル変数が呼べなかった為に、処理のコードに埋め込みました。
■2点目
2019-10-19 00:54:27.706 19017-19017//丙プロジェクト名/ E/AndroidRuntime: FATAL EXCEPTION: main
Process: /丙プロジェクト名//丙プロジェクト名/, PID: 19017
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at /丙プロジェクト・クラス名前/$2.onItemClick(/クラス名/.java:222)
at android.widget.AdapterView.performItemClick(AdapterView.java:318)
at android.widget.AbsListView.performItemClick(AbsListView.java:1252)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3221)
at android.widget.AbsListView$3.run(AbsListView.java:4207)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6563)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
■3点目
ログにもございますように、Arrayのサイズがゼロでしたので、「データの追加自体が出来ていない」と思いました。
■4点目
マークダウンの方法がやっと解かりました。誠にありがとうございます。
◆以下は修正後のコードです。
<beginapp.java>
import java.util.ArrayList; public class beginapp extends Application { public ArrayList<String> global_arraylist; public void setGlobal_arraylist() { global_arraylist = new ArrayList<String>(); } }
<データ投入部分コード>
beginapp nread = (beginapp) getApplication(); nread.setGlobal_arraylist(); nread.global_arraylist.add(string_id);
<string_idの経路>
boolean next = c2.moveToFirst(); global_id = c2.getInt(0); string_id = String.valueOf(global_id);
本当にありがとうございます。宜しくお願い申し上げます。
2019/10/19 AM11:30
ご報告が漏れておりましたが、global変数のArrayの他に、リストビューでArrayAdapterを使用し、データベースと繋げております。
只今、原因につきまして、自分でも調べさせて頂いております。
2019/10/19 PM4:27
申し訳ありません、質問です。
Global変数の寿命は、Applicationとほぼ、同じでしょうか…?
そして、Global変数として、ArrayListを使いたい、と、申し上げましたが、Global変数であるArrayListの中身は、Applicationが終了すると、無くなってしまいますでしょうか…?
もし、アプリ起動の度に、Global変数のArrayListのデータも0になってしまうのでしたら、私は、全く無意味なことをしようとしておりました。
貴重なお時間を頂いたにも関わらず、本当に申し訳ありません、m(__)m!!
別の方法と致しまして、別のデータベーステーブルを使い、idを管理することを考えております。
回答3件
あなたの回答
tips
プレビュー