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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

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

Android Studio

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

Q&A

解決済

1回答

608閲覧

Android Studio(java) SQLiteで作成したデータベースからデータの個数を取得し、動的にボタンを作成

bu_873

総合スコア10

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

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

Android Studio

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

0グッド

0クリップ

投稿2019/06/06 12:38

編集2019/06/06 15:38

前提・実現したいこと

java言語もAndroid Studioも数日前から触り始めた程度の超初心者で現在勉強中です。
「電話帳」の劣化のようなアプリを作成しており、
人の「氏名」をボタンにし、それを押すことで詳細情報を見られるようにしたいと思っております。

現在、Android Studio(java)で動的なボタンの実装で詰まっています。

SQLiteにより作成されたデータベースのデータの数だけボタンを作成するシステムを作りたいのですが実装の方法が分からず、お知恵をお借りしたいです。

発生している問題・エラーメッセージ

ー現在ー
・データベースは、SQLiteを利用し、CardOpenHelper.javaに別で作成。
・CardBase.java(mainの画面)には、レイアウトのxmlを既に設定している。
・CardBase.javaには、他に「テーブルの全削除」と「検索」、「追加」を実装。
(「検索」、「追加」は途中です)
・データベースには、仮として「id」、「氏名」、「ニックネーム」が入っています。
・ボタンに「氏名」

ー問題ー
・データの個数から動的にボタンを作成すること
(データ数が0ならボタンの表示なし。5なら5つのボタン)
・「追加」や「削除」によってデータの数が変わってしまう

該当のソースコード

java

1package es.practice; 2 3import android.content.ContentValues; 4import android.database.Cursor; 5import android.database.sqlite.SQLiteDatabase; 6import android.os.Bundle; 7import android.support.v7.app.AppCompatActivity; 8import android.view.View; 9import android.widget.Button; 10import android.widget.EditText; 11import android.widget.TextView; 12import android.widget.*; 13import android.content.Intent; 14 15public class CardBase extends AppCompatActivity { 16 17 private EditText et; 18 private TextView tv; 19 private CardOpenHelper dbhelper; 20 private String str; 21 private int num = 0; 22 private static SQLiteDatabase db; 23 Intent it; 24 public static int SAMPLE_APP = 1; 25 private String spinnerItems[] = {"氏名検索", "呼ばれ方検索", "グループ検索"}; 26 27 public void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 30 setContentView(R.layout.base); 31 32 Button bt1 = (Button)findViewById(R.id.button1); 33 Button bt2 = (Button)findViewById(R.id.button2); 34 bt1.setOnClickListener(new ExSampleClickListener()); 35 bt2.setOnClickListener(new ExSampleClickListener()); 36 37 Spinner spinner = (Spinner)findViewById(R.id.spinner); 38 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerItems); 39 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 40 spinner.setAdapter(adapter); 41 42 dbhelper = new CardOpenHelper(this); //データベースヘルパークラスの生成 43 db = dbhelper.getWritableDatabase(); //データベースのオープン 44 45 Cursor cr = db.query("carddb", new String[]{"_id", "name","nick"}, null, null, null, null, null); //クエリ結果をカーソルで取得 46 str = "知り合い\n"; 47 while (cr.moveToNext()) { //カーソルを一つづつ動かしてデータ取得 48 str += cr.getString(cr.getColumnIndex("_id")) + ":" + 49 cr.getString(cr.getColumnIndex("name")) + "\n"; 50 } 51 TextView tv = (TextView)findViewById(R.id.textView); 52 tv.setText(str); 53 54 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 55 // アイテムが選択された時 56 @Override 57 public void onItemSelected(AdapterView<?> parent, 58 View view, int position, long id) { 59 Spinner spinner = (Spinner)parent; 60 String item = (String)spinner.getSelectedItem(); 61 } 62 // アイテムが選択されなかった 63 public void onNothingSelected(AdapterView<?> parent) { 64 } 65 }); 66 67 } 68 69 70 71 class ExSampleClickListener implements View.OnClickListener { 72 public void onClick(View v) { 73 74 ContentValues values = new ContentValues(); //データベースに入力するデータを保存するためのオブジェクトの生成 75 switch(v.getId()){ 76 case R.id.button1: 77 78 79 break; 80 81 case R.id.button2: 82 db.delete("carddb", null, null); 83 break; 84 } 85 86 Cursor cr = db.query("carddb", new String[]{"_id", "name","nick"}, null, null, null, null, null); //クエリ結果をカーソルで取得 87 str = "知り合い\n"; 88 while (cr.moveToNext()) { //カーソルを一つづつ動かしてデータ取得 89 str += cr.getString(cr.getColumnIndex("_id")) + ":" + 90 cr.getString(cr.getColumnIndex("name")) + "\n"; 91 } 92 TextView tv = (TextView)findViewById(R.id.textView); 93 tv.setText(str); 94 } 95 } 96}

xml

1<?xml version="1.0" encoding="utf-8"?> 2<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:stretchColumns="1" 6 android:shrinkColumns="1"> 7 8 9 <TableRow 10 android:layout_width="match_parent" 11 android:layout_height="160dp"> 12 13 <Button 14 android:id="@+id/button1" 15 android:layout_width="200dp" 16 android:layout_height="wrap_content" 17 android:text="追加" /> 18 19 <Button 20 android:id="@+id/button2" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:text="全削除" /> 24 25 </TableRow> 26 27 <TableRow 28 android:layout_width="match_parent" 29 android:layout_height="match_parent"> 30 31 <Spinner 32 android:id="@+id/spinner" 33 android:layout_width="match_parent" 34 android:layout_height="match_parent" /> 35 /> 36 37 <SearchView 38 android:id="@+id/searchView" 39 android:layout_width="match_parent" 40 android:layout_height="wrap_content" /> 41 42 </TableRow> 43 44 <LinearLayout 45 android:layout_width="match_parent" 46 android:layout_height="match_parent" 47 android:orientation="vertical"> 48 49 <TextView 50 android:id="@+id/textView" 51 android:layout_width="match_parent" 52 android:layout_height="match_parent" /> 53 </LinearLayout> 54</TableLayout>

java

1package es.practice; 2 3import android.content.ContentValues; 4import android.content.Context; 5import android.database.sqlite.SQLiteDatabase; 6import android.database.sqlite.SQLiteOpenHelper; 7 8public class CardOpenHelper extends SQLiteOpenHelper { 9 private static final int DATABASE_VERSION = 3; 10 private static final String DATABASE_NAME = "Card.db"; 11 private static final String TABLE_NAME = "carddb"; 12 private static final String _ID = "_id"; 13 private static final String COLUMN_NAME_TITLE = "name"; 14 private static final String COLUMN_NAME_SUBTITLE = "nick"; 15 16 private static final String SQL_CREATE_ENTRIES = 17 "CREATE TABLE " + TABLE_NAME + " (" + 18 _ID + " INTEGER PRIMARY KEY," + 19 COLUMN_NAME_TITLE + " TEXT," + 20 COLUMN_NAME_SUBTITLE + " TEXT)"; 21 22 private static final String SQL_DELETE_ENTRIES = 23 "DROP TABLE IF EXISTS " + TABLE_NAME; 24 25 CardOpenHelper(Context context) { 26 super(context, DATABASE_NAME, null, DATABASE_VERSION); 27 } 28 29 public void onCreate(SQLiteDatabase db) { 30 db.execSQL( 31 SQL_CREATE_ENTRIES 32 ); 33 34 saveData(db, "伊藤", "itou"); 35 } 36 37 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 38 db.execSQL( 39 SQL_DELETE_ENTRIES 40 ); 41 onCreate(db); 42 } 43 44 public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 45 onUpgrade(db, oldVersion, newVersion); 46 } 47 48 public void saveData(SQLiteDatabase db, String name, String nick){ 49 ContentValues values = new ContentValues(); 50 values.put("name", name); 51 values.put("nick", nick); 52 53 db.insert("carddb", null, values); 54 } 55}

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

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

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

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

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

guest

回答1

0

ベストアンサー

ListView もしくは RecyclerView をご利用になられては如何でしょうか.

投稿2019/06/06 17:35

jimbe

総合スコア12646

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

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

bu_873

2019/06/07 09:05

勉強不足でList View知らなかったです…ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問