안드로이드 다음 맵 지도 라이브러리 사용 중 에러가 납니다.

조회수 2756회

다음 맵 API를 사용하여 앱을 만들고 있는데요 마커를 찍으려고 메소드를 만들어 사용하려고 하면 앱이 자꾸 꺼집니다.

일단 코드는 이렇고요

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, MapView.MapViewEventListener, MapView.POIItemEventListener {

    public static final String API_KEY = "다음맵API"; //실제 다음 API키 사용합니다. 여기선 가림

    private BackPressCloseHandler backPressCloseHandler;
    private MapView mapView;
    MapPoint.GeoCoordinate CurrentLocation;
    MapPOIItem mDefaultMarker;


    public static final int FINE_PERMISSION = 1000;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapView = new MapView(this);
        mapView.setDaumMapApiKey(API_KEY);
        ViewGroup mapViewContainer = (ViewGroup)findViewById(R.id.container);
        mapViewContainer.addView(mapView);

        int permissionFine = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); //위치권한 변수
        checkGPSPermission(permissionFine);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick (View view) {
               mapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading); //현재 위치 가져오기
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        backPressCloseHandler = new BackPressCloseHandler(this); //뒤로가기 키 두번 눌러서 종료하는 핸들러
        createDefaultMarker(mapView); //이부분 호출할때 에러 발생


    }

    private void createDefaultMarker(MapView mapView) {
        mDefaultMarker = new MapPOIItem();
        mDefaultMarker.setItemName("Marker");
        mDefaultMarker.setTag(0);
        mDefaultMarker.setMapPoint(MapPoint.mapPointWithGeoCoord(126.8439946101, 37.3282802259));
        mDefaultMarker.setMarkerType(MapPOIItem.MarkerType.BluePin);
        mDefaultMarker.setSelectedMarkerType(MapPOIItem.MarkerType.RedPin);

        mapView.addPOIItem(mDefaultMarker);
        mapView.selectPOIItem(mDefaultMarker, true);
        mapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(126.8439946101, 37.3282802259), true);
    }
    //나머지(밑에 부분) 생략

에러코드는 05-07 23:46:27.785 937-1364/kingofparking.vmffn.com.kingofparking A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 1364 (GLThread 48521)

이렇게 뜨는데 구글링 해보니까 잘못된 주소 참조해서 그렇다는데 왜 그런지 잘 모르겠어요. 다음맵 샘플 SDK에 있는 코드중에 마커 생성하는 createDefaultMarker 메소드 그대로 갖고와서 했는데 에러가 나네요. P.S 마니페스트에 android:hardwareAccelerated="false" 추가해도 해결이 안되네요

1 답변

  • 참고하고 있는 다음맵 샘플 SDK 링크를 알 수 있을까요? 올려주신 에러는 다음맵 라이브러리의 JNI 코드에서 에러가 발생하면서 출력된 로그입니다. 따라서 자바 코드의 문제를 찾기에는 어려움이 있습니다. 추측되는건 초기화가 필요한 부분이 초기화되지 않았거나 API를 호출하는 순서가 잘못됐거나 그런 상황이 아닐까 싶습니다.

    참고하신 다음맵 샘플 SDK를 알려주시면 올려주신 코드와 비교해 볼 수 있을 것 같습니다. 혹시나 참고하고 있는 샘플 코드가 실제로 잘 동작하는지도 확인해 볼 필요가 있습니다. 라이브러리가 최신 버전인지도 확인해보시고요. 참고로 예전에 다음맵 API를 마커를 출력할 때 특별한 문제는 없었습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)