Захват изображения с камеры и сохранение в базе данных Firebase RealTime DataBase

Я создаю приложение для инвентаризации образцов кристаллов друга в Котлине. Предполагаемая логика такова:

  • введите ввод (предварительный просмотр приложения)
  • добавить или сделать снимок (кнопка открытия фото находится в imgView под кнопкой отправки)
  • Разместить
  • Объект RockEntry создается с записью изображения и добавляется в базу данных Firebase RealTime.

Однако я не уверен, как сохранить изображение в базе данных Firebase RealTime. Я видел примеры этого процесса на Java, и он требует, чтобы в onActivityResult data.data были преобразованы в растровое изображение перед сохранением, но я недостаточно понимаю, чтобы преобразовать это. Я надеялся, что кто-нибудь сможет объяснить, как и почему сохранять изображения с камеры, а не с камеры в firebase.

Мой код ниже, и я добавляю несколько вопросов.

RockEnry.kt

package com.inven.rock_stock

import android.content.Intent
import android.graphics.Picture
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.core.Context

class RockEntry {
    var name = ""
    var purchDate = ""
    var local = ""
    var mine = ""
    var weight = ""
    var paid = ""
    var asking = ""
    var description = ""
    var dimensions = ""

    constructor(name:String,purchDate:String,local:String,mine:String,
                weight:String,paid:String,asking:String,description:String,dimensions:String,){
        this.name = name
        this.purchDate = purchDate
        this.local = local
        this.mine = mine
        this.weight = weight
        this.paid = paid
        this.asking = asking
        this.description = description
        this.dimensions = dimensions

как сохранить изображение в конструкторе?

   }
}

Основное действие

package com.inven.rock_stock

import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Intent
import android.os.Bundle
import android.provider.MediaStore
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.database.FirebaseDatabase
import kotlinx.android.synthetic.main.activity_main.*

var CAMERA_REQUEST_CODE = 0
var database = FirebaseDatabase.getInstance().reference

class MainActivity : AppCompatActivity() {  
    private val TAG = "MyActivity"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        button.setOnClickListener {
            var name = name.text.toString()
            var local = locality.text.toString()
            var mine = mine.text.toString()
            var weight = weight.text.toString()
            var dimensions = dimensions.text.toString()
            var paid = paid.text.toString()
            var asking = asking.text.toString()
            var description = description.text.toString()

            database.child("Rocks").child(name.toLowerCase()).setValue(
                RockEntry(
                    name,
                    local,
                    mine,
                    weight,
                    dimensions
                    paid,
                    asking,
                    description


                )
            )
        }

        imageBtn.setOnClickListener {
            takePicture()
        }
    }


    private fun takePicture() {
        CAMERA_REQUEST_CODE = 222
        val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        try {
            startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE)
        } catch (e: ActivityNotFoundException) {
            // display error state to the user
        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            CAMERA_REQUEST_CODE -> {
                if (resultCode == Activity.RESULT_OK && data != null) {

println(Что мне нужно сделать, чтобы получить изображение в firebase?)

                    val singularity = data.data

                    }

                }

            }

        }

    }

Я предполагаю, что у меня есть некоторые концептуальные проблемы:

  • что нужно сделать, чтобы сохранить фото с камеры в firebase,
  • чем способ возврата фотографии из библиотеки отличается от способа возврата фотографии с живой камеры?

Я нашел несколько примеров на Java здесь (которые я, вероятно, должен был создать этот проект в), но мое преобразование довольно уродливо на данный момент.
вот документ, на который я смотрел photobasicsDoc, uploadDoc


person Slowly_Learning    schedule 03.01.2021    source источник


Ответы (1)


Мое заблуждение заключалось в том, что FireBaseDatabase и FireBaseStorage были одним и тем же.

  • Самое главное, я настроил некоторое хранилище с помощью инструментов Firebase в Android Studio (которые также добавили соответствующие зависимости)
    Я удалил private var mStorageRef: StorageReference? = null и установил его равным
    mStorageRef = FirebaseStorage.getInstance().getReference("ImagesBB") в моем onCreate.

    ниже был код, которого мне не хватало в моем onActivityResult:

    val imageBitmap = data.extras?.get("data") as Bitmap
                        val baos = ByteArrayOutputStream()
                        imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
                        val datar = baos.toByteArray()
    
                        mStorageRef!!.putBytes(datar)
    

Я все еще приветствую вклад в пост, вопросы, которые все еще остаются в силе:

  • Как связать FireBaseDataBase и FireBaseStorage.
  • Как вы должны хранить изображение в объекте.
  • чем способ возврата фотографии из библиотеки отличается от способа возврата фотографии с живой камеры?


спасибо

person Slowly_Learning    schedule 04.01.2021