Android开发中常见错误——数据存储
来源:互联网 发布:qt4.8.4 源码下载 编辑:程序博客网 时间:2024/05/18 02:45
1、使用场景:
adapter = new SimpleCursorAdapter(this,R.layout.item_list,cursor ,new String[]{"id","name","age"}, new int[]{R.id.tv_id,R.id.tv_name,R.id.tv_age} ,2);报错: Caused by: java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:302) at android.support.v4.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:317) at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:92) at com.dong.sqlitedemo.MainActivity.click(MainActivity.java:79)
错误:与cursor有关
分析:在检查上下文,都没发现错误,然后发现在代码中根本没有”_id”的代码,所以应该是cursor自动加的
SimpleCursorAdapter:规定展示数据的时候,主键名必须是以”_”开头:如:”_id”
解决办法:在创建表示,将列属性”id”改为”_id”,再运行,发现问题解决
或者自定义适配器
2、使用场景:
Cursor cursor = db.rawQuery(“select * from person”,null);
db.close();
if(cursor != null && cursor.getCount() > 0){…}
报错:
java.lang.IllegalStateException:
Cannot perform this operation because the connection pool has been closed.
错误:数据库已经关闭,不能再操作
分析:因为cursor中有多组数据,而数据库被关闭的太早,还没操作完,所以报错
解决办法:将数据完全操作完后,再关闭数据库
3、使用场景:
if(cursor != null && cursor.getCount() > 0){ // cursor.moveToNext(); 改正 int id = cursor.getInt(0); String name = cursor.getString(1); int age = cursor.getInt(2);报错: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
错误:cursor下标越界异常
分析:cursor游标还没有移动就开始操作,此时的游标并没有数据,长度为0,下标是-1,所以会报越界异常
解决办法:先将游标cursor移动到下一位,再对cursor进行取数据,即cursor.moveToNext()
4、使用场景:读取短信记录
报错: Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.telephony.SmsProvider from ProcessRecord{539187fc 1027:com.dong.contentresovlerdemo/u0a54} (pid=1027, uid=10054) requires android.permission.READ_SMS or android.permission.WRITE_SMS
错误:没有权限,无法读取
分析:在清单文件中,没有加上操作短信数据库的权限
解决办法:在清单文件中加上权限即可:android.permission.READ_SMS or
android.permission.WRITE_SMS
5、使用场景:
String snippet = cursor.getString(cursor.getColumnIndex("snippet")); long date = cursor.getLong(cursor.getColumnIndex("date")); Cursor cursor2 = SMSContentResolverHelper.getNumberSMS(getContentResolver(), id); cursor2.moveToFirst(); //String address = cursor2.getString(cursor.getColumnIndex("address")); 改正:String address = cursor2.getString(cursor2.getColumnIndex("address"));报错: E/AndroidRuntime(1148): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
错误:不能读取该位置:row 0, col -1 ,要确保查询的字段在cursor中存在
分析:因为操作了两个cursor,所以将cursor搞混了
解决办法:正确操作所要操作的cursor
- Android开发中常见错误——数据存储
- android jni开发中常见的错误
- android开发中常见错误汇总
- Android中JNI开发之常见错误
- android开发常见错误
- Android 开发 常见错误
- Android中数据存储——SharedPreferences存储数据
- Android中数据存储——文件存储数据
- Android中数据存储——SQLite数据库存储数据
- Android中数据存储——ContentProvider存储数据
- Android中数据存储——文件存储数据
- Android开发——数据存储之文件存储
- Android开发中常见错误与开发小技巧
- 常见android开发错误整理(陆续补充中...)
- Android开发中几个常见错误处理方法
- android开发中几个常见的错误及解决方法
- Android开发中常见的10个错误
- Android开发中常见的10个错误
- Android Shimmer微光闪烁shimmer-android
- oss系统和bss系统 mss系统是什么意思
- 30.Oracle数据库SQL开发之 SQLPlus使用——从SQL获取帮助信息
- 数论总结
- 【数据结构】顺序表的基本操作
- Android开发中常见错误——数据存储
- iOS本地推送(本地通知)
- X86-64寄存器和栈帧
- 31.Oracle数据库SQL开发之 SQLPlus使用——自动生成SQL语句
- 【数据结构】图的基本操作
- javascript 权威指南——笔记2
- 从头认识java-7.3 接口怎样解耦?
- 求生之路正版2140文件备份
- 数组的优化循环展开与分割