私のプログラムの目的は、SQLiteデータベースにデータを格納し、そのデータベースをリストビューで使用することです。 私は以下のコードを提供しました(いくつかの不要なコードを削除しました)。 ダミーデータをデータベースに正常に挿入しました。 カスタムアダプターのレイアウトも正しく機能しています。 Timetableのオブジェクトを作成するときに私のアプリがクラッシュしました。 私はできることをすべて試みましたが、うまくいきませんでした。カスタムカーソルアダプタが機能しないのはなぜですか? ArrayAdapterと一緒に使用すると、同じコードが正常に動作していました
さらに詳しい情報が必要な場合はお知らせください。コードは以下によってMainActivity.java
TimeTableDBHelper timeTableDbHelper = new TimeTableDBHelper(this);
SQLiteDatabase db = timeTableDbHelper.getWritableDatabase();
db = timeTableDbHelper.getReadableDatabase();
String[] columns = {TimeTableContract.COLUMN_NAME_START_TIME,TimeTableContract.COLUMN_NAME_END_TIME,
TimeTableContract.COLUMN_NAME_DATE,
TimeTableContract.COLUMN_NAME_MONTH
};
Cursor cursor = db.query(TimeTableContract.TABLE_NAME, columns, null, null, null, null, null);
//My app is crashing after this line only
TimeTableAdapter adapter = new TimeTableAdapter(this, cursor);
ListView listView = (ListView) findViewById(R.id.mainListView1);
listView.setAdapter(adapter);
cursor.close();
TimetableAdapter.java
public class TimeTableAdapter extends CursorAdapter
{
public TimeTableAdapter(Context context, Cursor cursor)
{
super(context,cursor,0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
return LayoutInflater.from(context).inflate(R.layout.table_list_view, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor)
{
int startColumnIndex = cursor.getColumnIndex(TimeTableContract.COLUMN_NAME_START_TIME);
String time1 = cursor.getString(startColumnIndex);
int endColumnIndex = cursor.getColumnIndex(TimeTableContract.COLUMN_NAME_END_TIME);
String time2 = cursor.getString(endColumnIndex);
int dateColumnIndex = cursor.getColumnIndex(TimeTableContract.COLUMN_NAME_DATE);
String date = cursor.getString(dateColumnIndex);
int monthColumnIndex = cursor.getColumnIndex(TimeTableContract.COLUMN_NAME_MONTH);
String month = cursor.getString(monthColumnIndex);
TextView startTime = (TextView) view.findViewById(R.id.start_time);
TextView endTime = (TextView) view.findViewById(R.id.end_time);
TextView tuitorName = (TextView) view.findViewById(R.id.tuitor_name);
TextView subject = (TextView) view.findViewById(R.id.subject);
TextView remarks = (TextView) view.findViewById(R.id.remarks);
TextView dateMonth = (TextView) view.findViewById(R.id.date);
startTime.setText(time1);
endTime.setText(time2);
tuitorName.setText("Tutor");
subject.setText("subject");
remarks.setText("remarks...");
dateMonth.setText(date+", " + month);
}
契約クラス
データベース内のテーブルを作成public class TimeTableContract
{
// Make constructor private do that it does not initiatted accidently
private TimeTableContract()
{};
public static final String TABLE_NAME = "time_table";
public static final String COLUMN_NAME_START_TIME = "start_time";
public static final String COLUMN_NAME_END_TIME = "end_time";
public static final String COLUMN_NAME_DATE = "date";
public static final String COLUMN_NAME_MONTH = "month";
public static final String COLUMN_NAME_ID = "_id";
}
で
(方法によって問題がありません私のデータベースヘルパークラス)
"CREATE TABLE " + TimeTableContract.TABLE_NAME + " (" +
TimeTableContract.COLUMN_NAME_ID + " INTEGER PRIMARY KEY," +
TimeTableContract.COLUMN_NAME_START_TIME + " TEXT," +
TimeTableContract.COLUMN_NAME_END_TIME + " TEXT,"+
TimeTableContract.COLUMN_NAME_DATE + " TEXT,"+
TimeTableContract.COLUMN_NAME_MONTH + " TEXT)";
名前付き引数と同じ_idを取得します。 –
何でも。しかし、後ほど簡単なカーソル・アダプタからカーソル・アダプタへコードを移植することで、問題に陥ることはありません。 –
私のコードに問題があります。 –