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

조도 센서값을 표시하는 앱을 만들고 있는데, 조도 센서를 가리면 에러가 나네요.

0 추천

사용기종은 갤럭시s3입니다.

조도센서 값을 받아 화면에 그래프로 표시하는 앱입니다.

전부 이상없이 작동을 잘하는데, 테스트를 위해서 조도센서 전체를 손으로 가리고 있으면, 다음 로그와 함께 앱이 작동을 멈춥니다.

왜 그러는지 모르겠네요 ㅠㅠ

 

고수님들의 도움을 부탁드립니다.

 

02-02 22:51:11.724: D/AndroidRuntime(29602): Shutting down VM
02-02 22:51:11.724: W/dalvikvm(29602): threadid=1: thread exiting with uncaught exception (group=0x41c1c2a0)
02-02 22:51:11.749: D/dalvikvm(29602): GC_CONCURRENT freed 439K, 8% free 12399K/13447K, paused 12ms+12ms, total 42ms
02-02 22:51:11.764: E/AndroidRuntime(29602): FATAL EXCEPTION: main
02-02 22:51:11.764: E/AndroidRuntime(29602): java.util.ConcurrentModificationException
02-02 22:51:11.764: E/AndroidRuntime(29602): at java.util.TreeMap$MapIterator.stepForward(TreeMap.java:883)
02-02 22:51:11.764: E/AndroidRuntime(29602): at java.util.TreeMap$BoundedMap$BoundedIterator.stepForward(TreeMap.java:1485)
02-02 22:51:11.764: E/AndroidRuntime(29602): at java.util.TreeMap$BoundedMap$BoundedEntrySet$1.next(TreeMap.java:1513)
02-02 22:51:11.764: E/AndroidRuntime(29602): at java.util.TreeMap$BoundedMap$BoundedEntrySet$1.next(TreeMap.java:1511)
02-02 22:51:11.764: E/AndroidRuntime(29602): at org.achartengine.chart.XYChart.draw(XYChart.java:250)
02-02 22:51:11.764: E/AndroidRuntime(29602): at org.achartengine.GraphicalView.onDraw(GraphicalView.java:166)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.draw(View.java:13767)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12718)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12762)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3153)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12654)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12762)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3153)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12654)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12762)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3153)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12654)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12762)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3153)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12654)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12762)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3153)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12654)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.View.getDisplayList(View.java:12762)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1144)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2281)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2153)
02-02 22:51:11.764: E/AndroidRuntime(29602): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1964)
 
익명사용자 님이 2014년 2월 2일 질문
로그 올리는데 글자 제한이 걸려 여기에 나머지 로그 마저 올립니다.

02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1118)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4525)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.view.Choreographer.doFrame(Choreographer.java:525)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.os.Handler.handleCallback(Handler.java:615)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.os.Looper.loop(Looper.java:137)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at android.app.ActivityThread.main(ActivityThread.java:4946)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at java.lang.reflect.Method.invokeNative(Native Method)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at java.lang.reflect.Method.invoke(Method.java:511)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
02-02 22:51:11.764: E/AndroidRuntime(29602):  at dalvik.system.NativeStart.main(Native Method)
그리고, 제가 혹시 몰라 제가 작성한 코드도 첨부합니다.

    @Override
    public void onSensorChanged(SensorEvent event)
    {
        if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
            //return;
        }
        if(event.sensor.getType() == Sensor.TYPE_LIGHT) {
            if(event.values[0]!=Float.NaN){
                sensorData = Double.parseDouble(new Float(event.values[0]).toString());
            }else{
                sensorData = 0d;
            }
        }
    }
답변 달아줄지도 모를 사람들을 위해서 로그에서 불필요한 02-02 22:51:11.764: E/AndroidRuntime(29602): 이런 부분은 빼고 올리는게 좋습니다
저도 보니 눈이 빙그르르르.... 보기가 어려워요....;
아무튼 조도가 0일때 문제인데, 0일때 따로 처리를 하여 어떻게 출력되는지  확인을 해보심이 어떨까 싶네요.
if(event.sensor.getType() == Sensor.TYPE_LIGHT) {
            if(event.values[0]!=Float.NaN){
                sensorData = Double.parseDouble(new Float(event.values[0]).toString());
            }else{
                sensorData = 0d;
            }
        }

상황만 들어 보면 센서 값이 안들어올때 발생하는 에러니까
sensorData = 0d; 이 부분이 문제 같은데
더블형 값을 넣어주는 거면 0d 가 아니라 0.0 을 넣어주셔야하지않나용? 문자 d를 인식하는가 ㅎㅎ
안드로이드 개발을 독학으로 시작한지 한 달 밖에 안되어서...

사실 로그캣 보는 것은 Log.d 사용해서 밖에 볼 수 없는 초보입니다. ^^;;

말씀하신, Runtime 부분은 다음에는 삭제해서 올리겠습니다.

그리고 조도가 0일때가 문제였는데, 이상하게 오늘 다른 부분의 스레드 부분을 처리하고 나니까

에러가 안 나네요 ㅠㅠ

그리고 너무 급하게 공부해서 double 형에는 d를 안 붙여도 되는 것을 몰랐네요.

댓글 달아주신 모든 분들께 감사합니다.

사실 독학으로 공부하는 것이 힘들기는 하지만, 인터넷에 찾아보니 수많은 블로거들의 자료

그리고 이곳에서 질문 하셨던 여러분들의 글과 답변들을 통해서 많이 배우고 있습니다.

하루하루가 즐겁네요. 감사합니다. ^^
아, 그리고 댓글 주셨던 글 중에 답변으로 채택은 할 수 있는 방법도 모르겠네요. ㅠㅠ
댓글 달아주신 모든 분들께 다시 한 번 진심으로 감사드립니다.
댓글은 채택 못합니다. 답변을 달기 쉽게 질문을하면 댓글달기가 아니라 답변달기로 하는 경향이 있으니 다음 질문은 참고하세요 ^^
혹시 ui스레드가 아닌 곳에서 뷰들을 제어하는곳이 있는지 확인해보세요.
그런곳이 있다면 runonuithread 라는 함수를 찾아보세요
댓글 달아주신 분들 감사합니다. ^^

1개의 답변

+1 추천
google에서 sensor graph cds 로 검색 해 보세요
익명사용자 님이 2014년 4월 23일 답변
답변 감사합니다. ^^
...