이 글은 공부를 위해 작성된 글이므로 정확한 정보가 아닐 수 있음을 감안하고 읽어주시기 바랍니다.

 

오늘은 DB에서 얻은 위치정보를 이용하여 마커를 생성하도록 하는 기능을 추가시키는 중이었는데,

문제가 발생했다....

 

onResponse에서 얻은 값을 이용하여 바로 마커를 생성하도록 했는데,

마커를 찍는것은 UI 스레드에서 실행되어야 하는것이다.

서버에서 데이터는 OKHttp를 이용하여 받았는데 OKHttp의 onResponse는 메인 스레드에서 실행되지 않으므로

문제가 발생한 것이었다.

 

public void onSuccess(@Nullable String data) {
        Log.d("onSuccess",data + "얻은 값");
        
        // DB에서 얻은 값 파싱하여

        for(int i = 0; i < mapDataItems.length; i++)
        {
            final MarkerOptions  marker = new MarkerOptions()
                    .position(new LatLng(mapDataItems[i].getPLACE_COORD_X(),mapDataItems[i].getPLACE_COORD_Y()))
                    .title(mapDataItems[i].getPLACE_TITLE())
                    .snippet(mapDataItems[i].getPLACE_ADDRESS())
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
                    
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mGoogleMap.addMarker(marker);
                }
            });


            }

나같은 경우는 마커를 찍는 부분만 메인 스레드에서 실행되도록 했다.

 

 

간단하게 해결하긴 했으나 이렇게 작성하는 것이 맞는지는 모르겠다.

하지만 이 코드를 사용하여 나는 원하는 결과를 얻었다.

+ Recent posts