user3652133
user3652133

Reputation: 1

CursorAdapter with android and illegal error

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

Answers (1)

Vetalll
Vetalll

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

Related Questions