10 21

sooj·2023년 10월 21일

1 Bitmap


FATAL EXCEPTION: main
Process: com.example.frompet, PID: 8049
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
at com.google.android.gms.common.internal.Preconditions.checkNotNull(com.google.android.gms:play-services-basement@@18.1.0:2)
at com.google.android.gms.maps.model.BitmapDescriptorFactory.zzb(com.google.android.gms:play-services-maps@@18.1.0:1)
at com.google.android.gms.maps.model.BitmapDescriptorFactory.fromBitmap(com.google.android.gms:play-services-maps@@18.1.0:2)
at com.example.frompet.ui.map.NaverMapFragment$setMark$1.invoke(NaverMapFragment.kt:215)
at com.example.frompet.ui.map.NaverMapFragment$setMark$1.invoke(NaverMapFragment.kt:209)
at com.example.frompet.ui.map.NaverMapFragment.setMark$lambda$5(NaverMapFragment.kt:209)
at com.example.frompet.ui.map.NaverMapFragment.$r8$lambda$dITMXDu4JNk5eSKhcT-Q1fEnCNg(Unknown Source:0)
at com.example.frompet.ui.map.NaverMapFragment$$ExternalSyntheticLambda3.onSuccess(Unknown Source:2)
at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.2:1)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)

<지도 마커 - > Firebase storage 폴더 이미지로 설정>
1.
2. 바이트 배열 bytes를 비트맵으로 디코딩


2


    private fun setMark(location: UserLocation) {
        val marker = Marker()

        val storageRef = FirebaseStorage.getInstance().reference
        val imageRef = storageRef.child("images/IMAGE_20231016_214525.png") // 이미지 파일 경로

        // 이미지 다운로드 하고 마커 아이콘 설정
        imageRef.getBytes(ONE_MEGABYTE.toLong()).addOnSuccessListener { bytes ->
            if (bytes != null) {
                val imageBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size) // 다운 받은 바이트를 비트맵으로 변환
                val image = BitmapDescriptorFactory.fromBitmap(imageBitmap)// 비트맵 이미지를 네이버 지도 마커 아이콘으로 설정
                marker.icon = OverlayImage.fromBitmap(imageBitmap)
            }
        }

            // 마커 위치
            if (location != null) {
                marker.position = LatLng(location.latitude, location.longitude)
            }
            // 마커 우선순위
            marker.zIndex = 10
            // 마커 표시
            marker.map = naverMap
            // 원근감 표시
            // marker.iconPerspectiveEnabled = true
            // 마커의 투명도
            marker.alpha = 0.8f
        
    }

-> 맵 실행하면 앱이 죽음

[이유]
확실한 이유는 모르겠으나. 일단

  • BitmapDescriptorFactory는 Google Maps Android API
    Firebase와 연동하여 Google Maps를 사용할 때 사용하는 클래스
    따라서 Naver Map SDK에서는 BitmapDescriptorFactory를 직접 사용할 수 없음
    .
    .
    .

https://navermaps.github.io/android-map-sdk/reference/com/naver/maps/map/overlay/OverlayImage.html#fromBitmap(android.graphics.Bitmap)


profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글