Я использую собственный listView, чтобы показать данные из sqlite.Подробная информация об элементе будет отображаться в списке элементов.Итак, я попытался установить действие на ListItemClicked, затем я получил ошибку вроде
database not Open and arrayIdexOutOfBound
Затем я установил прослушиватель щелчка по строке (вид элемента списка).Работает нормально.Но если я нажимаю мгновенно, я получаю сообщение об ошибке:
03-07 17:11:51.223: E/AndroidRuntime(789): FATAL EXCEPTION: main
03-07 17:11:51.223: E/AndroidRuntime(789): java.lang.IllegalStateException: database not open
03-07 17:11:51.223: E/AndroidRuntime(789): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1224)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
03-07 17:11:51.223: E/AndroidRuntime(789): at (WeeklyDataSource.java:101)
03-07 17:11:51.223: E/AndroidRuntime(789): at l(WeeklyActivity.java:112)
03-07 17:11:51.223: E/AndroidRuntime(789): at .getCount(WeeklyActivity.java:120)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:157)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.widget.ListView.dispatchDraw(ListView.java:2991)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.View.draw(View.java:6846)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.widget.AbsListView.draw(AbsListView.java:2257)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.View.draw(View.java:6743)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.View.draw(View.java:6743)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.widget.FrameLayout.draw(FrameLayout.java:352)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.View.draw(View.java:6743)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.widget.FrameLayout.draw(FrameLayout.java:352)
03-07 17:11:51.223: E/AndroidRuntime(789): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewRoot.draw(ViewRoot.java:1407)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewRoot.performTraversals(ViewRoot.java:1163)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.os.Looper.loop(Looper.java:123)
03-07 17:11:51.223: E/AndroidRuntime(789): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-07 17:11:51.223: E/AndroidRuntime(789): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 17:11:51.223: E/AndroidRuntime(789): at java.lang.reflect.Method.invoke(Method.java:521)
03-07 17:11:51.223: E/AndroidRuntime(789): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 17:11:51.223: E/AndroidRuntime(789): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 17:11:51.223: E/AndroidRuntime(789): at dalvik.system.NativeStart.main(Native Method)
Я не эксперт и не опытный.Я просто не понимаю эти ошибки.
Код, в котором я установил row.onclickListener
row.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Gson gson = new Gson();
WeeklySchedule schedule = (WeeklySchedule) getItem(position);
String string = gson.toJson(schedule);
Intent intent = new Intent(WeeklyActivity.this,
AddWeeklySchedule.class);
intent.putExtra("GSON", string);
startActivity(intent);
}
});
Вот код источника данных:
public class WeeklyDataSource
{
private static final String TAG = "WeeklyDataSource";
private SQLiteDatabase weeklydb;
private WeeklySqliteOpenHelper dbHelper;
private Cursor cursor;
// private Context context;
public WeeklyDataSource(Context context)
{
// this.context = context;
dbHelper = new WeeklySqliteOpenHelper(context);
}
public void open() throws SQLException
{
weeklydb = dbHelper.getWritableDatabase();
}
public void close()
{
weeklydb.close();
}
public boolean createSchedule(WeeklySchedule weekly)
{
ContentValues cv = new ContentValues();
int i = 1;
String[] s = WeeklySqliteOpenHelper.getAllcoulumn();
cv.put(s[i++], weekly.getStartDate());
cv.put(s[i++], weekly.getEndDate());
cv.put(s[i++], weekly.getMondayHour());
cv.put(s[i++], weekly.getTuesdayHour());
cv.put(s[i++], weekly.getWednesdayHour());
cv.put(s[i++], weekly.getThusdayHour());
cv.put(s[i++], weekly.getFridayHour());
weeklydb.insert(WeeklySqliteOpenHelper.getWeeklyTableName(), null, cv);
// Cursor cursor = weeklydb.query(
// WeeklySqliteOpenHelper.getWeeklyTableName(), s, s[0] + " = "
// + insertId, null, null, null, null);
// cursor.moveToFirst();
// cursorToWeeklySchedule(cursor);
return true;
}
public boolean updateSchedule(WeeklySchedule weekly)
{
ContentValues cv = new ContentValues();
int i = 1;
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++],
weekly.getStartDate());
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++], weekly.getEndDate());
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++],
weekly.getMondayHour());
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++],
weekly.getTuesdayHour());
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++],
weekly.getWednesdayHour());
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++],
weekly.getThusdayHour());
cv.put(WeeklySqliteOpenHelper.getAllcoulumn()[i++],
weekly.getFridayHour());
weeklydb.update(
WeeklySqliteOpenHelper.getWeeklyTableName(),
cv,
WeeklySqliteOpenHelper.getAllcoulumn()[0] + "="
+ weekly.get_id(), null);
return true;
}
public boolean deleteSchedule(WeeklySchedule schedule)
{
System.out.println("Subject deleted with id: " + schedule.get_id());
weeklydb = dbHelper.getWritableDatabase();
weeklydb.delete(WeeklySqliteOpenHelper.getWeeklyTableName(),
SubjectSqliteOpenHelper.KEY_ROWID + " = " + schedule.get_id(),
null);
return false;
}
public ArrayList<WeeklySchedule> getAllSchedule()
{
ArrayList<WeeklySchedule> allSchedule = new ArrayList<WeeklySchedule>();
cursor = weeklydb.query(WeeklySqliteOpenHelper.getWeeklyTableName(),
WeeklySqliteOpenHelper.getAllcoulumn(), null, null, null, null,
null);
cursor.moveToFirst();
while (!cursor.isAfterLast())
{
allSchedule.add(cursorToWeeklySchedule(cursor));
cursor.moveToNext();
}
cursor.close();
return allSchedule;
}
public WeeklySchedule cursorToWeeklySchedule(Cursor cursor)
{
WeeklySchedule schedule = new WeeklySchedule(cursor.getString(1),
cursor.getString(2), cursor.getString(3), cursor.getString(4),
cursor.getString(5), cursor.getString(6), cursor.getString(7));
schedule.set_id(cursor.getLong(0));
return schedule;
}
}
МойВопрос в том, почему это происходит (ошибки)?
Любая идея для устранения этой ошибки была бы очень полезной.
Спасибо.