이 글은 공부를 위해 작성된 글이므로 정확한 정보가 아닐 수 있음을 감안하고 읽어주시기 바랍니다.
오늘은 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);
}
});
}
나같은 경우는 마커를 찍는 부분만 메인 스레드에서 실행되도록 했다.
간단하게 해결하긴 했으나 이렇게 작성하는 것이 맞는지는 모르겠다.
하지만 이 코드를 사용하여 나는 원하는 결과를 얻었다.
'Android' 카테고리의 다른 글
[Android Studio] 안드로이드 스튜디오 테마 변경, 외부 테마 적용 (1) | 2021.04.25 |
---|---|
[안드로이드 스튜디오] 소프트키보드가 레이아웃에 영향을 줄 때 해결방법 (0) | 2020.08.31 |
[안드로이드 스튜디오] 앱 종료 후 재시작 시에 튕김, 비정상 종료 될 때 (0) | 2020.07.15 |
[안드로이드 스튜디오] Google Map Api MyLocationButton, ZoomButton, UI 버튼 활성화, 비활성화, 커스텀 이벤트 (0) | 2020.03.21 |
[안드로이드 스튜디오] Glide에서 가져온 이미지가 안 보일때 (0) | 2020.03.19 |