상세페이지 생성하기

Hwan·2023년 6월 15일
0

GiftMap

목록 보기
11/15

구현할 내용

  • 추가 버튼을 눌렀을 때, item의 정보를 수동으로 입력하는 페이지 생성
  • 완료 버튼을 누르면 이전 페이지로 돌아가면서 입력한 정보를 서버에 전송 (다음 포스트)

1. activity_upload.xml

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>

2. ManageActivity.kt

작성하였던 DB, storage 업로드 코드를 모두 삭제. 상세페이지로 이동+수정 시켰다.

3. UploadActivity.kt

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
    }
}

0개의 댓글