게시판에서 글을 작성해야 하며 해당 Fragment를 재사용하여 수정하기 기능도 추가하였다.
기존에 글을 작성할 때 사진 첨부가 가능하며 사진 관련 기능으로는
1. 갤러리에서 선택
2. 최대 5장까지 허용
3. 한장씩 혹은 여러개를 한번에 추가 가능
4. 리사이클러뷰에서 아이템의 x 버튼 클릭시 삭제 기능
5. URI를 가져와 File로 만든 후 MultipartBody.Part
로 변환해서 서버에 업로드
게시글 작성 기능을 완성 후 수정하기 기능을 추가하였는데 문제가 발생하였다.
private fun convertURLtoURI(photos: List<PostContent>) {
photos.forEach {
Glide.with(requireActivity()).asBitmap().load(it.content)
.into(object : CustomTarget<Bitmap>() {
override fun onLoadStarted(placeholder: Drawable?) {
super.onLoadStarted(placeholder)
viewModel.downloadImage()
}
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?
) {
uris.add(getImageUri(requireContext(), resource))
//모든 사진을 uri로 변환 후 뷰모델에 알림.
if (uris.size == photos.size) {
viewModel.completeDownload()
}
}
override fun onLoadCleared(placeholder: Drawable?) {
}
})
}
}
fun getImageUri(inContext: Context, inImage: Bitmap): Uri {
val bytes = ByteArrayOutputStream()
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
val path = MediaStore.Images.Media.insertImage(
inContext.contentResolver,
inImage,
"Title",
null
)
return Uri.parse(path)
}
글라이드를 이용하여 쉽게 변환할 수 있었다.
forEach를 이용하여 모든 url을 uri 로 변환후 viewmodel에 작업이 끝남을 알려주고 이에 따라서 다음 작업을 진행하였다.