함수를 처리한 결과가 제대로 나오지 않는다면 그건 뭘까.
분명 제대로 함수 사용했는데 값이 null로 나오면 그것은 무엇일까...
이 심오한 것의 해답은 메소드의 sync/async(동기/비동기) 비슷하게 생각하믄 되겠다..

전에 Android에서 MyLocationOverlay를 쓰려던 적이 있었다.
뻔한 소스지만
MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this,mapView);
myLocationOverlay.enableMyLocation();
mc.animateTo(myLocationOverlay.getMyLocation());
하면..
내 좌표를 못 구해온다...

왜일까...
잘 한거 같은데 왜 못 구해올까..

그것은.. enableMyLocation이 시간이 걸리는 작업이기 때문이다!
저 메소드가 구현하기 쉬운 착한 녀석이었다면(만약 내가 구현했다면), enableMyLocation() 이후 내 위치를 구해 올 때 까지 다음 줄로 넘어가지 않고 대기를 했을텐데.. dalvik은 그렇게 하지 않았다..
그냥 enable명령을 보내줘 놓고 바로 다음줄로 넘어간다...
MyLocationOverlay가 enableMyLocation() 메소드를 받고선 그걸 처리하고 GeoPoint를 얻어 내는데 까지는 꽤 시간이 걸린다.
GPS와 Network 모두를 이용해서 내 위치를 탐색하기 때문이다..
그러기 전까지 getMyLocation()의 값은 null 값이 나온다.
즉 위에 적은 소스처럼 단번에 넘어가 버리면 getMyLocation()값이 null값으로 나온다는 것이다...
저 부분 사이에 getMyLocation()이 null이 아닐 때 까지 대기 하는 부분을 추가로 넣으면 될 듯 하다..


그 외에도.. 예전에 인터넷 페이지 소스 긁어와서 파싱하는 프로그램을 짜는데
getSource(); 를 해주고 바로 그 밑에 얻어온 소스를 파싱해 주는 부분이 있었는데..
계속 source가 제대로 나오질 않는다..
이것 역시 getSource();가 페이지의 소스를 다 긁어 낸 후 다음 명령행으로 넘기는 함수가 아니라..
긁어놓은 명령만 보내 놓고 다음 명령행으로 넘어가기 때문이다...
이 때 에도 소스 코드의 끝 부분 (</html>)을 받아올 때 까지 대기타는 명령을 하나 추가했어야 했다.

여튼.. 이처럼.. 메소드를 제대로 실행 했는데 다음 명령행에서 검사한 메소드의 리턴값이 제대로 뜨지 않을 땐, 리턴 되는데 시간이 걸린 다는 것을 의심해보자.
저작자 표시 비영리 변경 금지
신고
블로그 이미지

roter

JHB / Peripheral Programmer

Tag ,

댓글을 달아 주세요