日历二次开发与 bug 修改中的典型错误

  • 在没有修改任何文件的情况下,只是做删除,删除 Java 文件和 xml 文件,除了 Java 文件中做了添加,XML 文件只是做了删除,再次编译报错如下:

          

05-09 15:28:46.897 25262-25262/? E/AndroidRuntime: FATAL EXCEPTION: main

                                                   Process: com.android.calendar, PID: 25262

                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.calendar/com.android.calendar.AllInOneActivity}: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.android.calendar.ShowHideFloatingButton

                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)

                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)

                                                       at android.app.ActivityThread.access$900(ActivityThread.java:150)

                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)

                                                       at android.os.Handler.dispatchMessage(Handler.java:102)

                                                       at android.os.Looper.loop(Looper.java:148)

                                                       at android.app.ActivityThread.main(ActivityThread.java:5417)

                                                       at java.lang.reflect.Method.invoke(Native Method)

                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

                                                    **Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.android.calendar.ShowHideFloatingButton**

                                                       at com.android.calendar.AllInOneActivity.onCreate(AllInOneActivity.java:463)

                                                       at android.app.Activity.performCreate(Activity.java:6285)

                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)

                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)

                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 

                                                       at android.app.ActivityThread.access$900(ActivityThread.java:150) 

                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 

                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 

                                                       at android.os.Looper.loop(Looper.java:148) 

                                                       at android.app.ActivityThread.main(ActivityThread.java:5417) 

                                                       at java.lang.reflect.Method.invoke(Native Method) 

                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 

                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

          针对以上,错误,其实并没有对出错语句做任何修改,在删除 xml 文件之前时也是可以运行的,但是删除了就报错,所不能强制转换,查询资料了解到解决方法是:

         

Eclipse tends to mess up your resources every now and then. This leads to some odd behavior such as strings and images being swapped all over your app, and more commonly classCastException(s), which happen when Eclipse switches your Views' ids around.

A few solutions to that problem:

Clean your project.

Modify an xml layout file and save.

Delete your R file. (Don't worry it will be automatically generated again).

Basically anything that makes your project rebuild and re-generate the R file.

          解释是,eclipse 会时不时混乱你的资源,这些导致你的一些零散的操作,例如:strings 文件,image 等资源在你的 app 中被混乱,并且通常导致强制转换错误,因为是 eclipse 切换了视图的 id 值,混乱了这些 id 值,导致系统强制转换错误。解决办法:

  1. 清除工程

  2. 修改任意一个 xml 文件并保存

  3. 删除 R 文件

               总之就是做任何改变(在 xml 文件中的改变),使得系统重新生成 R.java 文件,即可解决问题

  
    展开阅读全文