07 ตุลาคม 2556

[Android Dev Tips] วิธีแก้ปัญหา ClassCastException แบบไม่มีสาเหตุ


        ปัญหานี้เป็นอีกหนึ่งปัญหาสุดจะตูดหมึก เฉกเช่นเดียวกับ [Android Dev Tips] Incorrect line ending: found carriage return (\r) without corresponding newline (\n) ซึ่งปัญหานี้พบได้บ่อยเวลาที่จัด Layout บน Relative Layout เมื่อย้ายตำแหน่งของ Child ในนั้น พอลองรันดูก็พบว่าเออเรอร์ดังนี้



        ตอนแรกเจ้าของบล็อกก็จัดตำแหน่งพวก Button หรือ Text View ที่อยู่บน Relative Layout นี่แหละ แล้วอยู่ๆก็เกิดเออเรอร์แจ้งขึ้น พอเจ้าของบล็อกมาเช็คโค๊ดดูก็ถูกต้องหมดแล้ว ไม่มีอันไหนสลับ มารู้ทีหลังก็พบว่าเป็นบั๊กของโปรแกรมที่ไป Gen ตัวแปรใน R.java ผิดเอง

        วิธีแก้ไขง่ายๆก็คือ ลบโค๊ด XML ของ Layout ทั้งหมดในนั้นทิ้งก่อน แล้วกด Save จากนั้นก็ค่อย Undo แล้ว Save ใหม่อีกครั้งก็หายแล้ว

        สรุปก็คือที่หน้า Layout ให้เปิดเป็นแบบ XML แล้วกดตามนี้

                                Ctrl + A
                                Ctrl + X
                                Ctrl + S
                                Ctrl + Z
                                Ctrl + A

        หรือถ้าจะให้ง่ายกว่านั้นเลือกไปที่ Project > Clean... เพื่อให้เคลียร์โปรเจคใหม่ดีกว่า

        เพียงเท่านี้บั๊กที่ว่าก็หายไปเรียบร้อยแล้ว สาเหตุก็คือ Ctrl + A เพื่อเลือกคำสั่งทั้งหมด แล้วทำการ Cut ข้อความออกจาก XML จากนั้นก็ Save ซึ่งจะเป็นการ Save หน้าโค๊ดเปล่าๆ ใน R.java ก็จะเคลียร์ตัวแปรของ Layout ทั้งหมดออก จากนั้นก็ Undo กลับ เพื่อให้โค๊ดเหมือนเดิมแล้วก็ Save ดังนั้น R.java ก็จะ Gen ตัวแปรใหม่ก็จะไม่บั๊กแล้ว

        อย่าลืมนะว่าต้องมั่นใจก่อนว่าโค๊ดไม่ผิด ไม่ใช่ว่าพิมโค๊ดผิดเองแล้วมาแก้ด้วยวิธีนี้ก็ไม่หายนะ




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium