마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

QR스캐너 ZXING 사용시 에러관련해서 질문입니다.

0 추천

안드로이드용 ZXING 소스를 받아서 이클립스에 임포트 시키고, core.jar 파일 추가해준 뒤

Library Project 화 시켰습니다.

 

그리고 Test 앱에 ZXING 프로젝트 라이브러리를 추가하여 TEST 앱에서 바코드 스캐너 액티비티를 실행시키면

 

아래와 같은 에러가 납니다.

 

05-15 16:46:59.152: E/AndroidRuntime(11779): FATAL EXCEPTION: main
05-15 16:46:59.152: E/AndroidRuntime(11779): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.qrapp/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.google.zxing.client.android.ViewfinderView
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.ActivityThread.access$600(ActivityThread.java:127)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.os.Handler.dispatchMessage(Handler.java:99)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.os.Looper.loop(Looper.java:137)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.ActivityThread.main(ActivityThread.java:4507)
05-15 16:46:59.152: E/AndroidRuntime(11779): at java.lang.reflect.Method.invokeNative(Native Method)
05-15 16:46:59.152: E/AndroidRuntime(11779): at java.lang.reflect.Method.invoke(Method.java:511)
05-15 16:46:59.152: E/AndroidRuntime(11779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
05-15 16:46:59.152: E/AndroidRuntime(11779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-15 16:46:59.152: E/AndroidRuntime(11779): at dalvik.system.NativeStart.main(Native Method)
05-15 16:46:59.152: E/AndroidRuntime(11779): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.google.zxing.client.android.ViewfinderView
05-15 16:46:59.152: E/AndroidRuntime(11779): at com.google.zxing.client.android.CaptureActivity.onCreate(CaptureActivity.java:158)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.Activity.performCreate(Activity.java:4465)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
05-15 16:46:59.152: E/AndroidRuntime(11779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
05-15 16:46:59.152: E/AndroidRuntime(11779): ... 11 more
 
 
 
 
 
 
그런데 웃긴거는 기본 테스트 앱의 레이아웃 파일명이 a나 b로 시작되면 저런 에러가 발생하고
(보통 default layout 파일명이 activity_main.xml 이죠)
 
a나 b로 시작 안하고 다른 이름으로 바꾸어주면 무난히 동작합니다.
 
이유를 혹시 아시는분 계시나요?
 
레모네임 (410 포인트) 님이 2014년 5월 15일 질문

1개의 답변

0 추천
그건 잘 모르겠고..
 
05-15 16:46:59.152: E/AndroidRuntime(11779): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to com.google.zxing.client.android.ViewfinderView
05-15 16:46:59.152: E/AndroidRuntime(11779): at com.google.zxing.client.android.CaptureActivity.onCreate(CaptureActivity.java:158)
 
CaptureActivity 의 158번 라인을 확인해보세요~ 텍스트뷰위젯 캐스트 예외 발생했다고 하네요 '-'?
초보개발자ㅠ (33,870 포인트) 님이 2014년 5월 15일 답변
안녕하세요 이 문제 해결하긴 했는데 방법만 알아내고 원인은 모르겠네요
layout xml 파일들 중에 a나 b로 시작하는 파일이 있으면 저런 에러가
발생하네요.

 라이브러리 프로젝트 추가시엔 레이아웃 xml 파일 이름의 시작 글자가
a 나 b로 시작하면 안되는데 혹시 왜그런지 아시나요..?
xml 파일이름의 제약은 알파벳 소문자 a~z, 숫자 0~9, 언더바( _ ) 이지~ 글쓴님 말씀대로 시작 글자에 대해 특별한 제약조건은 없습니다.
a 나 b 라면 더더욱 상관없지요.. 하지만 어찌됐든 a나 b를 사용했을 때 동일하게 위와 같은 에러가 발생한다면 코드와 관련된 문제가 아닐까 추측되네요. 시점을 달리 해보셔야할 것 같아요. 158번 라인의 코드는 무엇인가요? 그리고 a 나 b 로 시작하면 이라는 것이 리팩토링해서 적용하신건지 아니면 새롭게 작성해서 적용하신건지도 차이가 있을 수 있겠구요 리팩토링해서 했다면 해당 xml 을 참조하고 있는 부분들을 자동으로 바꿔주는 옵션을 사용할수있는데 해당 옵션을 사용할 경우 동일 아이디의 위젯들이 충돌을 일으키거나 꼬일 수 있는 가능성이 다분하니까요
...