본문 바로가기
개발/안드로이드

[안드로이드] 구글맵 클러스터링 커스텀 마커 표출 | 버그리포트

by 핸디(Handy) 2020. 1. 24.

 

버그 사항 : 기존의 onCameraIdlelistner 를 clustermanger 가 받는 방식의 구현으로, 마커 위치 데이터를 다 받았는데도 표출하지 못함.

수정 : 데이터 파싱이 끝나고 clustermanager에 데이터 삽입이 완료되면 zoom out을 통해 clustermanager에 신호를 주는 방식으로 개선

기존 마커 클러스터링 설명 :  
2020/01/15 - [개발] - [안드로이드] 구글맵 + 마커 클러스터링 + 커스텀 마커 + 마커 클릭 이벤트 구현

public class SeoulbikeApi extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

    }

    @Override
    protected String doInBackground(String... strings) {
        Log.d("Task3", "POST");
        String temp = "Not Gained";
        try {
            temp = GET("");
            Log.d("REST", temp);
            return temp;
        } catch (IOException | ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        return temp;
    }
 }

 대에충 요런식이었습니다. 

AsyncTask를 통해 쓰레드를 돌려서 여기서 공공데이터인 따릉이 데이터를 파싱하는 것이었죠. 

근데 AsyncTask는 메인쓰레드(UI쓰레드) 가 아니기 때문에 메인쓰레드에서 일어날 법한 작업이 그냥은 불가능합니다. 

하지만 위의 OnPostExecute에서는 가능합니다. 일반적으로 작업은( 여기선 데이터파싱) doInBackground에서 작업을 하고 작업이 완료되면 OnPostExecute 가 호출됩니다.
간략히 설명하자만 OnpreExecute() -> doInBackground -> OnPostExecute() 이런 식이죠. 다만 doInBackground 의 작업 틈틈히 메인쓰레드 역할을 할 수 있는 onProgressUpdate() 가 있습니다. 이 힘수는 doInBackground 안에서 publishProgress()를 호출함으로써 UI 스레드상에서 실행됩니다

 

수정 후 코드

 

 

댓글