이번에는 게시글을 생성하는 기능을 만들어 보자
1. 갤러리로 사진 불러오기
var PICK_IMAGE_FROM_ALBUM = 0
var photoUri: Uri? = null
val photoPickerIntent = Intent(Intent.ACTION_PICK)
photoPickerIntent.type = "image/*"
startActivityForResult(photoPickerIntent, PICK_IMAGE_FROM_ALBUM)
. . .
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == PICK_IMAGE_FROM_ALBUM) {
photoUri = data?.data
Log.d("SUCCESS", "onActivityResult photo uri: $photoUri")
binding.uploadImg.setImageURI(photoUri)
} else {
Log.d("FAIL", "onActivityResult: 문제가 발생함")
finish()
}
}
- PICK_IMAGE_FROM_ALBUM: 갤러리로 이동할때 전달되서, onActivityResult에서 requestCode가 같은지 확인하는 변수
- onActivityResult에서 PICK_IMAGE_FROM_ALBUM와 requestCode가 같으면 photoUri에 사진 uri를 저장하고, imageView에 보여준다
2. 파일 업로드
private val postDto = PostDto()
. . .
// file 형식 만들기
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val imageFileName = "IMAGE_${timestamp}_.png"
val storageRef = storage?.reference?.child("images")?.child(auth?.uid!!)?.child(imageFileName)
// 업로드, 데이터베이스 추가
storage?.reference?.child("profileImage")?.child(auth?.uid!! + ".png")?.downloadUrl
?.addOnSuccessListener { imageUri ->
postDto.profileImg = imageUri.toString()
}
storageRef?.putFile(photoUri!!)?.addOnSuccessListener {
storageRef.downloadUrl.addOnSuccessListener { uri ->
postDto.imageUrl = uri.toString()
getData()
}
}
- 파일 형식: 현재 날짜
- putFile로 이미지를 넣으면 firebase storage에 파일 데이터가 저장됨
3. 포스팅 기능 구현
private fun getData() {
// data 담기
postDto.explain = binding.commentPost.text.toString()
postDto.uid = auth?.currentUser?.uid
postDto.userId = auth?.currentUser?.email
postDto.tag1 = binding.hashiText1.text.toString()
postDto.tag2 = binding.hashiText2.text.toString()
postDto.tag3 = binding.hashiText3.text.toString()
val time = System.currentTimeMillis()
val date = Date(time)
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:MM")
postDto.timestamp = dateFormat.format(date)
fireStore.collection("posts").document().set(postDto).addOnCompleteListener {
if (it.isSuccessful) {
Toast.makeText(this, "업로드가 완료되었습니다.", Toast.LENGTH_SHORT).show()
finish()
startActivity(Intent(this, MainPageActivity::class.java))
}
}
}
- postDto: 포스팅 정보를 저장할 변수
- postDto에 데이터를 담은 후 firebase firestore에 저장한다
- 성공하면 액티비티 종료후 MainPageActivity로 이동
4. 결과 화면
728x90
'📱| Android > 🔥 | Firebase' 카테고리의 다른 글
[Android, Kotlin] firebase sns 앱 만들기 5(게시글 세부 기능) (0) | 2022.10.28 |
---|---|
[Andoird, Kotlin] firebase sns 앱 만들기 4(게시물 불러오기) (3) | 2022.07.19 |
[Android, Kotlin] firebase sns앱 만들기 2(로그인) (0) | 2022.06.23 |
[Andorid, Kotlin] firebase sns 앱 만들기 1(회원 가입) (0) | 2022.06.19 |
[Android Kotlin] firebase fireStore, storage를 이용해 recyclerView로 사진 출력하기 (1) | 2022.03.31 |