在此记录一下android开发过程中遇到的错误,以备今后的查阅。
错误1:Android: R cannot be resolved to a variable
原因:自动生成的R文件被删除或不完整
解决方法:
1. 检查Android 的SDK是否丢失,需要重新下载,检查build path
2. 确保class没有import
Android.R
3.错误class引用的layout的xml文件没有错误,xml文件名没有大写字母(这个是我一直在犯却一直记不住的错误)
4. 检查AndroidManifest.xml文件,里边的package,layout配置文件,strings.xml等的字符串全部书写正确
5. layout的xml文件中引用的strings.xml中的字符串拼写完全正确
6.在layout 的xml文件添加一个控件,看id能否在R.java中自动生成,如果不能,那很大可能就是这个layout 的xml文件有问题,查看格式是否使用正确,或者包含什么非法字符串,或者调用到了不正确的字符串等等,可以使用排除法,挨个去掉控件,直到发现error
message消失或者id能在R.java中自动生成。
7.删掉gen文件夹,使R.java重新自动生成一次,如果不能生成,继续检查layout的xml文件是否有如上不易发觉的问题
8.Clean project ,重新build,或者重新import project
9.重启eclipse
10.重启电脑,以防Android 虚拟机的问题
错误2:gson格式化日期不规范导致javascript无法解析日期的问题
解决方法:Gson gson = new GsonBuilder().setDateFormat("yyyyMMddHHmmss").create();
错误3:android.content.res.Resources$NotFoundException:String resource ID #0x86
原因:给一个控件设置文本属性时,属性值必须为字符串
解决方法:源代码为textview.setText( item.getName()); 虽然item.getName()方法返回的是String类型但还是报上面的错,抱着试试的心态将代码改为textview.setText("" + item.getName()); 就不报错,不知道为什么。
错误4:android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1
原因:游标cursor的下标是从-1开始的。
解决方法:cursor.moveToNext();
错误5:error inserting:column id is not unique
原因:在SQLite中插入数据时如果违反了unique约束就会报上面的错误
解决方法:采用insertWithOnConflict(String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)方法,通过最后一个参数conflictAlgorithm来定制冲突发生时的解决方法。
错误6:android java.lang.IllegalStateException:database not open
原因:没有将数据库打开,即在操作数据库之前调用了db.close(),或者未通过getWritableDatabase()或getReadableDatabase()获取SQLiteDatabase对象。
解决方法:注释掉db.close(),调用getWritableDatabase()或getReadableDatabase()。这个错误是在第二次打开app时产生的,我一直找不到错误原因,因为db.close()是在主activity的onDestroy()中调用的。后来我才发现我将DBHelper设为单例模式,只在第一次创建DBHelper对象时才通过getWritableDatabase()或getReadableDatabase()获取SQLiteDatabase对象,在每次调用DBHelper时获取SQLiteDatabase对象就将错误解决了。
错误7:The import com.google can not be resolved
原因:build target应该选择Google APIs而不是Android APIs。
解决方法:右键项目名称 -> 属性 -> Android,在Project Build Target中选择相应的Google APIs。
错误8:Binary XML file line #6: Error inflating class com.example.mymapdemo.MyMapView
原因:1.XML文件的第6行,引用自定义控件的包名错误。
2.自定义控件中的构造函数错误。
解决方法:
1.引用自定义控件在XML文件中作为布局元素时必须使用控件的完整路径名称,即包名+类名。如果使用ctrl+鼠标点击可以跳转到控件定义的地方,就是正确的引用。
2.自定义View必须实现基类View的三个构造函数:
View(Context context) //Simple constructor to use when creating a view from code
View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML
View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style
第二个和第三个构造函数对于使用XML文件inflate的View是必须实现的。