黑屏看不了,可以听的,那可以
你不发错误的位置怎么看那里错了
我也遇到了这个问题,是在抽取mAdapter的时候,你再核对下抽取的是否new对了
你找到问题了吗?
getWritableDatabase();
不需要哦,是基于android系统自带的SQLite数据库
单词写错了,是“create”,不是“creat”
DatabaseHelper类里面的deleteAllData方法写成private了吧
看一下创建表的sql语句是不是写错了
creat 应为 create
解决了。
有两个地方需要改。
public Cursor getAllCostData() {
SQLiteDatabase database = getWritableDatabase();
return database.query("imooc_daily", null, null, null, null, null, "cost_date" +"ASC");
}最后面的排序需要改成 "cost_date ASC"
if (cursor != null) {
while (cursor.moveToNext()) {
CostBean costBean = new CostBean();
costBean.costTitle = cursor.getString(cursor.getColumnIndex("cost_title"));
costBean.costDate = cursor.getString(cursor.getColumnIndex("cost_date"));
costBean.costMoney = cursor.getString(cursor.getColumnIndex("cost_money"));
mCostBeanList.add(costBean);
}
cursor.close();
}这里获取不了cost_money的准确列数,所以需要改成如下形式。
if (cursor != null) {
while (cursor.moveToNext()) {
CostBean costBean = new CostBean();
int dataColumnIndex = cursor.getColumnIndex("cost_title");
costBean.costTitle = cursor.getString(dataColumnIndex + 0);
costBean.costDate = cursor.getString(dataColumnIndex + 1);
costBean.costMoney = cursor.getString(dataColumnIndex + 2);
mCostBeanList.add(costBean);
}
cursor.close();
}这里是以cost_title为基准列数,向后退出cost_date和cost_money的列数。
我遇到的问题是costBean.costMoney = cursor.getString (cursor.getColumnIndex ("cost_Money"));
这行代码有问题。 cursor.getColumnIndex ("cost_Money")得到的返回值是-1,然后得不到getString的返回值。返回错误,造成程序闪退。因为数据库中,money的column比data的column多1然后我就改写了一下,绕过了这个问题。int datacolumnIndex = cursor.getColumnIndex ("cost_date");
costBean.costMoney = cursor.getString(datacolumnIndex+1);
这样的话就不存在找不到money的column了,用data的column+1代表money。顺利解决。
我明白了是由于之前有建立过一个错误的数据库导致的,需要将原来的数据库删除,重新运行即可
我解决了
我以找到错误,
在我这个SQLite语句中,每一句的结尾多了一个空格字符
db.execSQL("create table if not exists imooc_cost("+
"id integer primary key,"+
"cost_title varchar,"+
"cost_date varchar,"+
"cost_money varchar)");