2015-11-09 30 views
-1

我一直试图在Android上创建一个简单的数据库,其中有一个表获取三个值,一个用于id,一个用于事件desc。另一个是字符串格式的时间。问题是,它无故崩溃,我找不到原因。这里是MainActivity:试图使用SQLite第一次使Android数据库,我的应用程序不断崩溃

public class MainActivity extends ListActivity { 

private static final int MENU_EDIT = Menu.FIRST+1; 
private static final int MENU_REMOVE = Menu.FIRST+2; 
ArrayList <String> Events = new ArrayList<String>(); 
ArrayList <Integer> ids = new ArrayList<Integer>(); 
ListView lview = (ListView)findViewById(R.id.listview); 

DBHandler db; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // registerForContextMenu(getListView()); 

    db = new DBHandler(this); 

    // db.addInfo(new Day_Info("stef", "123")); 


    loadList(); 



} 

private void loadList() { 

    try{ 
     Events.clear(); 
     ids.clear(); 
     for(Day_Info e:db.getAllInfo()){ 
      Events.add(e.getEvents()+", "+e.getTime()); 
      ids.add(e.getId()); 
     } 
     ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_2,Events); 
     lview.setAdapter(adapter); 
    } 
    catch(Exception e){ 
     Toast.makeText(this, "Problem Loading List", Toast.LENGTH_LONG).show(); 
    } 




} 

,这里是我的数据库类:

class DBHandler extends SQLiteOpenHelper { 



private static final String TABLE_NAME = "INFO"; 

private static final String DATABASE_NAME = "Schedule"; 

private static final String EVENT_DB ="event"; 

private static final String TIME_DB = "time"; 


public DBHandler(Context context) { 
    super(context, DATABASE_NAME, null, 1); 

    //Log.d("Database", "Database created"); 


} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String TABLE_CREATION = "CREATE TABLE "+ TABLE_NAME +" (_id INTEGER PRIMARY KEY AUTOINCREMENT, EVENT TEXT not null,TIME TEXT not null)"; 
    db.execSQL(TABLE_CREATION); 

    Log.d("Database", "Tables created"); 
} 



@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, 
         int newVersion) { 

} 


void addInfo(Day_Info info){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(EVENT_DB, info.getEvents()); 
    cv.put(TIME_DB, info.getTime()); 

    db.insert(TABLE_NAME, null, cv); 
    db.close(); 
} 

public ArrayList<Day_Info> getAllInfo(){ 
    ArrayList<Day_Info> List = new ArrayList<Day_Info>(); 

    String selectQuery = "SELECT * FROM "+TABLE_NAME; 

    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.rawQuery(selectQuery, null); 

    if(cursor.moveToFirst()){ 
     do{ 
      Day_Info info= new Day_Info(); 
      info.setId(Integer.parseInt(cursor.getString(0))); 
      info.setEvents(cursor.getString(1)); 
      info.setTime(cursor.getString(2)); 
      List.add(info); 
     }while(cursor.moveToNext()); 
     cursor.close(); 
    } 
    return List; 

} 

}

+1

发表的logcat你的错误,它会帮助我们检测到你的问题:) – zozelfelfo

+1

把你的logcat和它抛出的错误 –

+1

没有logcat的崩溃。 '不可能!' –

回答

0

您在位置0 coloumn是整型的

`_id INTEGER PRIMARY KEY AUTOINCREMENT` 

但是你正在尝试将其作为字符串取回

info.setId(Integer.parseInt(cursor.getString(0))); 

改用

info.setId(cursor.getInt(0)); 

没有logcat的,我认为这是你所面对的错误。如果你表现出你的日志,我会帮助更多的确定问题

0

还宣布_id作为整数上需要转换的光标位置(0)转换成整数放cursor.getInt(0)

相关问题