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

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

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

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

Q&A

解決済

1回答

1753閲覧

アンドロイド名前登録し、スピナーで表示する方法

aaaaaaaaaaaaaa

総合スコア77

Android Studio

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

0グッド

0クリップ

投稿2015/10/21 05:36

編集2015/10/21 05:42

アンドロイドでsqliteで作成したDBに名前を登録してスピナーに一覧として表示するシステムを開発しています。
初心者なのですが、間違いや修正点がありましたら教えていただけますか。
あと、DB作成は問題ありません。

ソースです。
public class MainActivity2 extends Activity {
private final static String DB_TABLE = "product"; // テーブル名

public MainActivity.DBHelper helper; public SQLiteDatabase db; private Spinner nSpinner; private final int FP = ViewGroup.LayoutParams.FILL_PARENT; public final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; private String[] data = {"テスト"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); // DB作成 helper = new MainActivity.DBHelper(MainActivity2.this); // データの取得 db = helper.getReadableDatabase(); // 列名の定義 String[] columns = {"id","name"}; // データの取得 Cursor cursor = db.query(DB_TABLE, columns, null, null, null, null, "id"); int i=0; // 取得したデータをテーブル明細部に設定 while (cursor.moveToNext()) { data[i]=cursor.getString(1); i++; } LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.HORIZONTAL); setContentView(linearLayout); Spinner spinner = new Spinner(this); linearLayout.addView(spinner, createParam(WC, WC)); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_main2, data); spinner.setAdapter(arrayAdapter); } private LinearLayout.LayoutParams createParam(int w, int h){ return new LinearLayout.LayoutParams(w, h); }

}

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

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

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

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

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

shiolier

2015/10/21 06:08

何に対するどんな回答をお求めですか?例えば、スピナーにうまく表示されないから原因が知りたい。表示はされたが、本当にこのコードでいいのか分からないから、コードの添削をしてほしい。など
aaaaaaaaaaaaaa

2015/10/21 06:18

配列にテーブルのデータを入れると問題がおきます。 入れなければ問題なく機能スピナーは起動しています。 どのようにテーブルの値をスピナーに入れるのかを聞きたいのです。
guest

回答1

0

ベストアンサー

ArrayIndexOutOfBoundsExceptionが発生しているのだと思います。
ArrayIndexOutOfBoundsExceptionは名前の通り、配列の範囲外にアクセスした場合にスローされる例外です。

Java

1private String[] data = {"テスト"};

Java

1int i=0; 2while (cursor.moveToNext()) { 3 data[i]=cursor.getString(1); 4 i++; 5}

要素数が1つの配列を作成して、その配列のインデックス1以降にアクセスしようとしているからですね。

Cursor#getCount()で行数を取得して、その数に合う配列を新たに作成するか、ArrayListなどList系の可変長配列を利用するのがいいと思います。


上記とは関係ありませんが、Cursorのインスタンスは、使用後に明示的にcloseすることが推奨されています。
いわゆる「メモリリーク」の原因となり得るからです。

投稿2015/10/21 06:56

編集2015/10/21 07:18
shiolier

総合スコア1156

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問