私はAndroidでアプリケーションを開発しており、databseからlistviewにデータを渡して表示する際に問題があります。Android:SQLiteデータベース(複数の列)からListViewを読み込む
は、ここですべてのメソッドと私のデータベースクラスである:
package com.example.admin.planesproject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.admin.planesproject.TodoTask;
public class PlanesDb {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "database.db";
private static final String DB_TODO_TABLE = "PlanesDb";
//columns
public static final String KEY_ID = "_id";
public static final String ID_OPTIONS = "INTEGER PRIMARY KEY AUTOINCREMENT";
public static final int ID_COLUMN = 0;
public static final String KEY_DATE = "date";
public static final String DATE_OPTIONS = "TEXT NOT NULL";
public static final int DATE_COLUMN = 1;
public static final String KEY_DIRECTION = "direction";
public static final String DIRECTION_OPTIONS = "TEXT NOT NULL";
public static final int DIRECTION_COLUMN = 2;
public static final String KEY_MODEL = "model";
public static final String MODEL_OPTIONS = "TEXT";
public static final int MODEL_COLUMN = 3;
public static final String KEY_AIRLINES = "airlines";
public static final String AIRLINES_OPTIONS = "TEXT";
public static final int AIRLINES_COLUMN = 4;
public static final String KEY_FROM = "from";
public static final String FROM_OPTIONS = "TEXT";
public static final int FROM_COLUMN = 5;
public static final String KEY_TO = "to";
public static final String TO_OPTIONS = "TEXT";
public static final int TO_COLUMN = 6;
private static final String DB_CREATE_TODO_TABLE =
"CREATE TABLE " + DB_TODO_TABLE + "(" +
KEY_ID + " " + ID_OPTIONS + ", " +
KEY_DATE + " " + DATE_OPTIONS + ", " +
KEY_DIRECTION + " " + DIRECTION_OPTIONS + ", " +
KEY_MODEL + " " + MODEL_OPTIONS + ", " +
KEY_AIRLINES + " " + AIRLINES_OPTIONS + ", " +
KEY_FROM + " " + FROM_OPTIONS + ", " +
KEY_TO + " " + TO_OPTIONS + ");";
private static final String DROP_TODO_TABLE =
"DROP TABLE IF EXISTS " + DB_TODO_TABLE;
private SQLiteDatabase db;
private Context context;
private DatabaseHelper dbHelper;
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name,
SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE_TODO_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_TODO_TABLE);
onCreate(db);
}
}
public PlanesDb(Context context) {
this.context = context;
}
public PlanesDb open(){
dbHelper = new DatabaseHelper(context, DB_NAME, null, DB_VERSION);
db = dbHelper.getWritableDatabase();
return this;
}
public void close() {
dbHelper.close();
}
public long insertTodo(String date, String direction, String model, String airlines, String from, String to) {
ContentValues newTodoValues = new ContentValues();
newTodoValues.put(KEY_DATE, date);
newTodoValues.put(KEY_DIRECTION, direction);
newTodoValues.put(KEY_MODEL, model);
newTodoValues.put(KEY_AIRLINES, airlines);
newTodoValues.put(KEY_FROM, from);
newTodoValues.put(KEY_TO, to);
return db.insert(DB_TODO_TABLE, null, newTodoValues);
}
public boolean updateTodo(TodoTask task) {
long id = task.getId();
String date = task.getDate();
String direction = task.getDirection();
String model = task.getModel();
String airlines = task.getAirlines();
String from = task.getFrom();
String to = task.getTo();
return updateTodo(id, date, direction, model, airlines, from, to);
}
public boolean updateTodo(long id, String date, String direction, String model, String airlines, String from, String to) {
String where = KEY_ID + "=" + id;
ContentValues updateTodoValues = new ContentValues();
updateTodoValues.put(KEY_DATE, date);
updateTodoValues.put(KEY_DIRECTION, direction);
updateTodoValues.put(KEY_MODEL, model);
updateTodoValues.put(KEY_AIRLINES, airlines);
updateTodoValues.put(KEY_FROM, from);
updateTodoValues.put(KEY_TO, to);
return db.update(DB_TODO_TABLE, updateTodoValues, where, null) > 0;
}
public boolean deleteTodo(long id){
String where = KEY_ID + "=" + id;
return db.delete(DB_TODO_TABLE, where, null) > 0;
}
public Cursor getAllTodos() {
String[] columns = {KEY_ID, KEY_DATE, KEY_DIRECTION, KEY_MODEL, KEY_AIRLINES, KEY_FROM, KEY_TO};
return db.query(DB_TODO_TABLE, columns, null, null, null, null, null);
}
}
私は私のテーブルからすべてを示すリストビューを持っているしたいのですが、私はそれを行う方法を把握することはできません。チュートリアルでは、ほとんどの場合、1つの行データベースを操作する方法しか示されていないため、あまり役に立ちません。すべてのgetterとsetterを持つ
私のToDoタスク:
public class TodoTask {
private long id;
private String date;
private String direction;
private String model;
private String airlines;
private String from;
private String to;
public TodoTask(long id, String date, String direction, String model, String airlines, String from, String to) {
this.id = id;
this.date = date;
this.direction = direction;
this.model = model;
this.airlines = airlines;
this.from = from;
this.to = to;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDate(){
return date;
}
public void setDate(String date){
this.date = date;
}
public String getDirection(){
return direction;
}
public void setDirection(String direction){
this.direction = direction;
}
public String getModel(){
return model;
}
public void setModel(String model){
this.model = model;
}
public String getAirlines(){
return airlines;
}
public void setAirlines(String airlines){
this.airlines = airlines;
}
public String getFrom(){
return from;
}
public void setFrom(String from){
this.from = from;
}
public String getTo(){
return to;
}
public void setTo(String to){
this.to = to;
}
}
そして最後に私の活動。これは、配列からlistviewを取り込む方法です。私のデータベースに似たものが必要です。
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class DatabaseCheck extends Activity {
private ListView lvPlanes;
private String[] planes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_database_check);
lvPlanes = (ListView) findViewById(R.id.list_all);
initResources();
initListView();
}
private void initResources() {
Resources res = getResources();
planes = res.getStringArray(R.array.listofplanes);
}
private void initListView() {
lvPlanes.setAdapter(new ArrayAdapter<String>(
getBaseContext(),
android.R.layout.simple_list_item_1,
planes));
}
}
DBを開いてリストを作成し、DBを閉じる必要があります。私はカスタムアダプターを構築すべきだと理解していますが、私は何をしたいのか分かりません。私は何かをやってみたが、すべての試みはアプリのクラッシュで終わった。誰でも助けてくれますか?どんな提案もありがとうございます、事前にありがとうございます。
ルックを役に立てば幸い - https://developer.android.com/reference/android/widget/CursorAdapter.html example https://stackoverflow.com/a/20532937/4252352 –