【サンプルコード付き】AndroidでSQLiteデータベースとCursorAdapterを使ってListViewにデータを効率的に表示する方法
AndroidでSQLiteデータベースとCursorAdapterを使う例
概要
準備
以下のものが必要です。
- Android Studio
- SQLiteデータベース
public class MainActivity extends AppCompatActivity {
private ListView listView;
private CursorAdapter cursorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SQLiteOpenHelperを継承したクラスを作成
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);
// データベースを取得
SQLiteDatabase db = helper.getWritableDatabase();
// Cursorを作成
Cursor cursor = db.query("table_name", null, null, null, null, null, null);
// CursorAdapterを作成
cursorAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[]{"column_name"},
new int[]{android.R.id.text1},
0);
// ListViewにCursorAdapterを設定
listView = findViewById(R.id.listView);
listView.setAdapter(cursorAdapter);
}
}
コード解説
- MySQLiteOpenHelperクラスを作成:SQLiteOpenHelperを継承し、データベースの作成、更新、削除などの処理を行う。
- データベースを取得:MySQLiteOpenHelperクラスのgetWritableDatabase()メソッドを使ってデータベースを取得。
- Cursorを作成:データベースのテーブル名を指定して、Cursorを作成。
- CursorAdapterを作成:SimpleCursorAdapterクラスを使って、CursorAdapterを作成。
実行
上記のコードを実行すると、ListViewにデータベースのデータが表示されます。
詳細
- SQLiteOpenHelper:SQLiteデータベースへのアクセスを管理するためのクラス。
- Cursor:データベースのクエリ結果を保持するためのクラス。
- CursorAdapter:CursorのデータをListViewなどのViewに表示するためのクラス。
- SimpleCursorAdapter:CursorAdapterの簡易版。
- サンプルコードは、必要に応じて変更してください。
public class MainActivity extends AppCompatActivity {
private ListView listView;
private CursorAdapter cursorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SQLiteOpenHelperを継承したクラスを作成
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);
// データベースを取得
SQLiteDatabase db = helper.getWritableDatabase();
// Cursorを作成
Cursor cursor = db.query("table_name", null, null, null, null, null, null);
// CursorAdapterを作成
cursorAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[]{"column_name"},
new int[]{android.R.id.text1},
0);
// ListViewにCursorAdapterを設定
listView = findViewById(R.id.listView);
listView.setAdapter(cursorAdapter);
}
}
// MySQLiteOpenHelper.java
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
public MySQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// テーブルを作成
db.execSQL("CREATE TABLE table_name (column_name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// データベースのアップグレード処理
}
}
コード解説
-
MainActivity.java
-
MySQLiteOpenHelper.java
- DATABASE_NAME:データベースの名前
- DATABASE_VERSION:データベースのバージョン
- onCreate():データベースが作成された時に呼び出されるメソッド。テーブルを作成する。
- onUpgrade():データベースがアップグレードされた時に呼び出されるメソッド。データベースのアップグレード処理を行う。
実行
AndroidでSQLiteデータベースとListViewを扱うその他の方法
ArrayAdapterは、単純なリストデータをListViewに表示するのに適しています。SQLiteデータベースから取得したデータをArrayListに変換すれば、ArrayAdapterを使ってListViewに表示できます。
// データベースからデータを取得
Cursor cursor = db.query("table_name", null, null, null, null, null, null);
// ArrayListに変換
ArrayList<String> list = new ArrayList<>();
while (cursor.moveToNext()) {
list.add(cursor.getString(0));
}
// ArrayAdapterを作成
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
// ListViewに設定
listView.setAdapter(adapter);
BaseAdapterは、より柔軟なリスト表示を実現したい場合に適しています。独自のViewHolderクラスを作成することで、リストアイテムのレイアウトを自由にカスタマイズできます。
// ViewHolderクラス
public class ViewHolder {
TextView textView;
}
// BaseAdapter
public class MyAdapter extends BaseAdapter {
private Context context;
private Cursor cursor;
public MyAdapter(Context context, Cursor cursor) {
this.context = context;
this.cursor = cursor;
}
@Override
public int getCount() {
return cursor.getCount();
}
@Override
public Object getItem(int position) {
cursor.moveToPosition(position);
return cursor.getString(0);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// レイアウトファイルからViewを取得
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
// ViewHolderを生成
holder = new ViewHolder();
holder.textView = convertView.findViewById(R.id.textView);
// ViewHolderをViewに保存
convertView.setTag(holder);
} else {
// ViewHolderを取得
holder = (ViewHolder) convertView.getTag();
}
// データをViewHolderに設定
cursor.moveToPosition(position);
holder.textView.setText(cursor.getString(0));
return convertView;
}
}
// ListViewに設定
listView.setAdapter(new MyAdapter(this, cursor));
RecyclerViewは、より高度なリスト表示を実現したい場合に適しています。さまざまなレイアウトやアニメーションを適用することができ、パフォーマンスも優れています。
// RecyclerView.Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private Cursor cursor;
public MyAdapter(Context context, Cursor cursor) {
this.context = context;
this.cursor = cursor;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// レイアウトファイルからViewを取得
View view = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
// ViewHolderを生成
return new MyAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
// データをViewHolderに設定
cursor.moveToPosition(position);
holder.textView.setText(cursor.getString(0));
}
@Override
public int getItemCount() {
return cursor.getCount();
}
// ViewHolderクラス
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
// RecyclerViewに設定
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setAdapter(new MyAdapter(this, cursor));
使用する方法は、要件や目的によって異なります。
- シンプルなリスト表示の場合は、ArrayAdapterを使うのが簡単です。
- より柔軟なリスト表示を実現したい場合は、BaseAdapterを使うことができます。
- 高度なリスト表示を実現したい場合は、RecyclerViewを使うのがおすすめです。
AndroidでSQLiteデータベースとListViewを扱う方法はいくつかあります。それぞれの方法の特徴を理解して、適切な方法を選択してください。
android database sqlite