구현할 내용
- 추가 버튼을 눌렀을 때, item의 정보를 수동으로 입력하는 페이지 생성
- 완료 버튼을 누르면 이전 페이지로 돌아가면서 입력한 정보를 서버에 전송 (다음 포스트)
UI 구현. 원활한 입력을 위해 스크롤 가능하도록 만듦 (ScrollView
)
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UploadActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".UploadActivity">
<ImageView
android:id="@+id/giftimg"
android:layout_width="250dp"
android:layout_height="500dp"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="15dp"
/>
<TextView
android:id="@+id/store1"
android:layout_width="70dp"
android:layout_height="50dp"
android:text="사용처"
android:textStyle="bold"
android:layout_marginTop="15dp"
android:textSize="16sp"
android:textColor="@color/themepink"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@id/giftimg"
app:layout_constraintStart_toStartOf="@+id/giftimg"
/>
<EditText
android:id="@+id/store2"
android:layout_width="180dp"
android:layout_height="50dp"
android:layout_marginTop="15dp"
android:textSize="16sp"
app:layout_constraintLeft_toRightOf="@id/store1"
app:layout_constraintTop_toBottomOf="@id/giftimg" />
<TextView
android:id="@+id/item1"
android:layout_width="70dp"
android:layout_height="50dp"
android:text="상품명"
android:textStyle="bold"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textColor="@color/themepink"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@id/store1"
app:layout_constraintStart_toStartOf="@+id/store1"
/>
<EditText
android:id="@+id/item2"
android:layout_width="180dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/store2"
app:layout_constraintLeft_toRightOf="@id/item1"
/>
<TextView
android:id="@+id/date1"
android:layout_width="70dp"
android:layout_height="50dp"
android:text="만료일"
android:textStyle="bold"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textColor="@color/themepink"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@id/item1"
app:layout_constraintStart_toStartOf="@+id/item1"
/>
<EditText
android:id="@+id/date2"
android:layout_width="180dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/item2"
app:layout_constraintLeft_toRightOf="@id/date1"
/>
<Button
android:id="@+id/done"
android:text="완료"
android:textSize="16sp"
android:layout_width="150dp"
android:layout_height="40dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/date1"
android:background="@drawable/round_backround"
android:layout_margin="15dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
작성하였던 DB, storage 업로드 코드를 모두 삭제. 상세페이지로 이동+수정 시켰다.
class UploadActivity : AppCompatActivity() {
private var selectedImageUri: Uri? = null
val database = FirebaseDatabase.getInstance()
val databaseRef = database.getReference("user_data")
private var progressDialog: ProgressDialog? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_upload)
openGallery()
val doneButton: Button = findViewById(R.id.done)
doneButton.setOnClickListener {
val storeEditText: EditText = findViewById(R.id.store2)
val store: String = storeEditText.text.toString()
val itemEditText: EditText = findViewById(R.id.item2)
val item: String = itemEditText.text.toString()
val dateEditText: EditText = findViewById(R.id.date2)
val date: String = dateEditText.text.toString()
if (selectedImageUri != null) {
showProgressDialog(this)
uploadImageTOFirebase(selectedImageUri!!, store, item, date)
}
}
}
private fun openGallery() {
val uploadImage = Intent(Intent.ACTION_PICK)
uploadImage.type = "image/*"
startActivityForResult(uploadImage, REQUEST_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null) {
selectedImageUri = data.data
val giftimg: ImageView = findViewById(R.id.giftimg)
giftimg.setImageURI(selectedImageUri)
}
}
private fun uploadImageTOFirebase(uri: Uri, store: String?, item: String?, date: String?) {
val storage: FirebaseStorage = FirebaseStorage.getInstance()
val fileName = "IMAGE_${SimpleDateFormat("yyyymmdd_HHmmss").format(Date())}_.png"
val imagesRef = storage.reference.child("images/").child(fileName)
imagesRef.putFile(uri)
.addOnSuccessListener {
// firebase DB에 정보 업로드
val key = databaseRef.push().key ?: ""
val result = hashMapOf(
"image_url" to imagesRef.path,
"store" to store,
"item" to item,
"date" to date
)
databaseRef.child(key).setValue(result)
.addOnSuccessListener {
hideProgressDialog()
finish()
}
.addOnFailureListener {
// 데이터 전송 실패 시 처리할 내용
Toast.makeText(getApplicationContext(), "실패", Toast.LENGTH_LONG).show()
hideProgressDialog()
finish()
}
}
}
fun showProgressDialog(context: Context) {
progressDialog = ProgressDialog.show(context, "", "업로드 중입니다...", true)
}
fun hideProgressDialog() {
progressDialog?.dismiss()
progressDialog = null
}
companion object {
private const val REQUEST_CODE = 100
}
}