Reputation: 1
I just want to keep a cursor in database and I'm was new bee with sqlite. It's have many error. I don't know how to fix this error. Please help me thank you..
my LogCat
06-13 05:39:10.845: E/AndroidRuntime(2270): FATAL EXCEPTION: main
06-13 05:39:10.845: E/AndroidRuntime(2270): Process: com.example.mmmm, PID: 2270
06-13 05:39:10.845: E/AndroidRuntime(2270): java.lang.RuntimeException: Unable to resume
activity {com.example.mmmm/com.example.mmmm.editPage}: java.lang.IllegalArgumentException: column '_id' does not exist <---------- **this was error in 1st.. I think**
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2788)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2817)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread.access$800(ActivityThread.java:135)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.os.Handler.dispatchMessage(Handler.java:102)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.os.Looper.loop(Looper.java:136)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread.main(ActivityThread.java:5017)
06-13 05:39:10.845: E/AndroidRuntime(2270): at java.lang.reflect.Method.invokeNative(Native Method)
06-13 05:39:10.845: E/AndroidRuntime(2270): at java.lang.reflect.Method.invoke(Method.java:515)
06-13 05:39:10.845: E/AndroidRuntime(2270): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-13 05:39:10.845: E/AndroidRuntime(2270): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-13 05:39:10.845: E/AndroidRuntime(2270): at dalvik.system.NativeStart.main(Native Method)
06-13 05:39:10.845: E/AndroidRuntime(2270): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.support.v4.widget.CursorAdapter.init(CursorAdapter.java:174)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.support.v4.widget.CursorAdapter.<init>(CursorAdapter.java:122)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.support.v4.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:54)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:63)
06-13 05:39:10.845: E/AndroidRuntime(2270): at com.example.mmmm.editPage.listData(editPage.java:131) <--------- **and I think this is an error of 2nd**
06-13 05:39:10.845: E/AndroidRuntime(2270): at com.example.mmmm.editPage.onResume(editPage.java:152)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.Activity.performResume(Activity.java:5310)
06-13 05:39:10.845: E/AndroidRuntime(2270): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2778)
class that have cursor adapter
public class editPage extends ListActivity {
private Button addEvent,addSchedule,deleteBtn;
//private DBAdapterEvent DBE;
private DBAdapter DB;
int scheduleID=0;
private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_page);
Intent intent=getIntent();
String day=intent.getStringExtra("day");
//DBE=new DBAdapterEvent(this);
addSchedule=(Button) findViewById(R.id.addbtn);
addEvent=(Button) findViewById(R.id.addAgendaBtn);
deleteBtn=(Button) findViewById(R.id.delbtn);
DB=new DBAdapter(editPage.this);
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DB.open();
DB.deleteAll();
DB.close();
scheduleID=0;
finish();
}
});
addSchedule.setOnClickListener(new View.OnClickListener() {
Bundle bundle=getIntent().getExtras();
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DB.open();
if(scheduleID==0){
//DB.addEventOnDate(date.getDate());
DB.insertEvent(bundle.getString("day"));
DB.getTbSchedule();
scheduleID= 1;
}else
{
DB.ToUpdateDate(scheduleID);
}
DB.close();
finish();
}
});
addEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent form2Intent = new Intent(editPage.this,addAgendaPage.class);
Bundle bundle = new Bundle();
bundle.putLong("ROWID", 0);
form2Intent.putExtras(bundle);
startActivityForResult(form2Intent,1);
}
});
}
private void listData(){ **<------ this method (CursorAdapter)**
DB.open();
cursor=DB.getListEvent();
cursor.moveToFirst();
String str;
for(int i=0;i<cursor.getCount();i++){
str=cursor.getString(cursor.getColumnIndex(DBAdapter.EVENT_TITLE));
System.out.println("testeserse"+str);
}
startManagingCursor(cursor);
String[] from=new String[] {DBAdapter.EVENT_TITLE};
int[] to=new int[] {R.id.editText1};
SimpleCursorAdapter listEvent=new SimpleCursorAdapter(this,R.layout.list_event,cursor,from,to);
setListAdapter(listEvent);
DB.close();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
Cursor c=cursor;
c.moveToPosition(position);
Intent intent=new Intent(editPage.this,addAgendaPage.class);
Bundle bundle=new Bundle();
bundle.putLong("ROWID", c.getLong(c.getColumnIndexOrThrow(DBAdapter.ROWID_EVENT)));
bundle.putString("EVENTTITLE", c.getString(c.getColumnIndexOrThrow(DBAdapter.EVENT_TITLE)));
intent.putExtras(bundle);
startActivityForResult(intent,1);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
listData();
}
@Override
public void startManagingCursor(Cursor c) {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
super.startManagingCursor(c);
}
}
}
my data base class
public class DBAdapter
{
//Declare fields in PersonInfo
public static final String ROWID_AGENDA = "agenda_id"; **<---- my id**
public static final String ROWID_EVENT = "event_id"; **<---- my id**
public static final String ROWID_DATE = "date_id"; **<----- my id**
public static final String AGENDA_TIME = "time_Key";
public static final String AGENDA_ACTIVITY = "activity_Key";
public static final String EVENT_TITLE = "Title_Key";//
public static final String KEY_DATE="Date_Key";//
private static final String DATABASE_CREATE_AGENDA =
"create table AgendaInfo (agenda_id integer primary key autoincrement, "
+ "time_Key text , activity_Key text );";
private static final String DATABASE_CREATE_EVENT =
"create table EventInfo (event_id integer primary key autoincrement, "
+ "Title_Key text);";
private static final String DATABASE_CREATE_DATE =
"create table DateInfo (event_id integer primary key autoincrement, "
+ "Date_Key text);";
private static final String DATABASE_NAME = "training.db";
public static final String tbAgenda = "AgendaInfo";
public static final String tbEvent = "EventInfo";
public static final String tbScheduleDate = "DateInfo";
private static final int DATABASE_VERSION = 1;
private final Context databaseContext;
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
databaseContext = ctx;
}
//start database helper
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE_AGENDA);
db.execSQL(DATABASE_CREATE_EVENT);
db.execSQL(DATABASE_CREATE_DATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS " + tbAgenda);
db.execSQL("DROP TABLE IF EXISTS " + tbEvent);
db.execSQL("DROP TABLE IF EXISTS " + tbScheduleDate);
onCreate(db);
}
}
//---opens the database---
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//---closes the database---
public void close()
{
DBHelper.close();
}
public long addEventOnDate(long date){
ContentValues value=new ContentValues();
if(date==1) {value.put(KEY_DATE,1 );}
else if(date==2) {value.put(KEY_DATE,2 );}
else if(date==3) {value.put(KEY_DATE,3 );}
else if(date==4) {value.put(KEY_DATE,4 );}
else if(date==5) {value.put(KEY_DATE,5 );}
else if(date==6) {value.put(KEY_DATE,6 );}
else if(date==7) {value.put(KEY_DATE,7 );}
else if(date==8) {value.put(KEY_DATE,8 );}
else if(date==9) {value.put(KEY_DATE,9 );}
else if(date==10) {value.put(KEY_DATE,10 );}
else if(date==11) {value.put(KEY_DATE,11 );}
else if(date==12) {value.put(KEY_DATE,12 );}
else if(date==13) {value.put(KEY_DATE,13 );}
else if(date==14) {value.put(KEY_DATE,14 );}
else if(date==15) {value.put(KEY_DATE,15 );}
else if(date==16) {value.put(KEY_DATE,16 );}
else if(date==17) {value.put(KEY_DATE,17 );}
else if(date==18) {value.put(KEY_DATE,18 );}
else if(date==19) {value.put(KEY_DATE,19 );}
else if(date==20) {value.put(KEY_DATE,20 );}
else if(date==21) {value.put(KEY_DATE,21 );}
else if(date==22) {value.put(KEY_DATE,22 );}
else if(date==23) {value.put(KEY_DATE,23 );}
else if(date==24) {value.put(KEY_DATE,24 );}
else if(date==25) {value.put(KEY_DATE,25 );}
else if(date==26) {value.put(KEY_DATE,26 );}
else if(date==27) {value.put(KEY_DATE,27 );}
else if(date==28) {value.put(KEY_DATE,28 );}
else if(date==29) {value.put(KEY_DATE,29 );}
else if(date==30) {value.put(KEY_DATE,30 );}
else {value.put(KEY_DATE, 31);}
db.insert(tbScheduleDate, null, value);
return db.insert(tbScheduleDate, null, value);
}
public Cursor getTbSchedule(){
Cursor cs=db.rawQuery("SELECT * FROM "+tbScheduleDate, null);
return cs;
}
public boolean ToUpdateDate(long recordid) {
return db.update(tbScheduleDate, null,
ROWID_DATE + "=" + recordid, null) > 0;
}
public void deleteAll() {
this.db.delete(tbScheduleDate, null, null);
}
//
//Event
public long insertEvent(String event){
ContentValues intialValues=new ContentValues();
intialValues.put(EVENT_TITLE, event);
return db.insert(tbEvent, null, intialValues);
}
public boolean ToUpdateEvent(long recordid, String title) {
ContentValues args = new ContentValues();
args.put(EVENT_TITLE,title);
return db.update(tbEvent, args,
ROWID_EVENT + "=" + recordid, null) > 0;
}
public boolean deleteEvent(long recordid)
{
return db.delete(tbEvent, ROWID_EVENT +
"=" + recordid, null) > 0;
}
public Cursor getListEvent(){
Cursor cs=db.rawQuery("SELECT * FROM " + tbEvent, null);
return cs;
}
//Agenda
public long insertAgenda(String Time,String Act) {
ContentValues initialValues = new ContentValues();
initialValues.put(AGENDA_TIME,Time);
initialValues.put(AGENDA_ACTIVITY,Act);
return db.insert(tbScheduleDate, null, initialValues);
}
public boolean ToUpdate(long recordid, String time,String act) {
ContentValues args = new ContentValues();
args.put(AGENDA_TIME,time);
args.put(AGENDA_ACTIVITY,act);
return db.update(tbScheduleDate, args,
ROWID_AGENDA + "=" + recordid, null) > 0;
}
public boolean deleteAgenda(long recordid)
{
System.out.println("chekkk===="+recordid);
return db.delete(tbScheduleDate, ROWID_AGENDA +
"=" + recordid, null) > 0;
}
public Cursor getListAgenda(){
Cursor cs=db.rawQuery("SELECT * FROM "+tbAgenda, null);
return cs;
}
Upvotes: 0
Views: 102
Reputation: 3700
You cannot use CursorAdapter without _id column. You have 2 solution.
1) First make _id column for your tables.
2) Make query like this:
SELECT agenda_id as _id, time_Key, activity_Key from AgendaInfo
Upvotes: 1