2014-06-13 2 views
0

커서를 데이터베이스에 유지하고 싶습니다. 그리고 저는 sqlite로 새로운 꿀벌이었습니다. 많은 오류가 있습니다. 이 오류를 해결하는 방법을 모르겠습니다. 내 로그 캣안드로이드 및 불법 오류가있는 CursorAdapter

.. 내가 당신을 감사 커서 어댑터가

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) 

클래스를 도와주세요

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); 

    } 
    } 



} 

내 데이터 기본 클래스

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; 

} 
+0

당신은 쿼리에 상수를 사용합니다. 따라서 DATABASE_CREATE_AGENDA에서 direclty 작성 agenda_id 대신 ROWID_AGENDA를 사용하십시오. 그리고이 ID를 '_id'로 변경해야합니다 (답변보기) –

+0

알립니다. 감사합니다 선생님 : D – user3652133

답변

1

당신은 _id 컬럼없이 CursorAdapter를 사용할 수 없습니다 . 2 가지 해결책이 있습니다.

1) 먼저 테이블에 대해 _id 열을 만듭니다. 이 같은

2) 확인 쿼리 :

SELECT agenda_id as _id, time_Key, activity_Key from AgendaInfo 
+0

감사합니다. 어때 cursorAdapter 오류가 데이터베이스 클래스를 통해. – user3652133

+0

이 예외는 setAdapter()를 시도 할 때 나타납니다. _id 열을 수정하면 모든 것이 잘됩니다. – Vetalll

관련 문제