Я создаю приложение для инвентаризации образцов кристаллов друга в Котлине. Предполагаемая логика такова:
- введите ввод (предварительный просмотр приложения)
- добавить или сделать снимок (кнопка открытия фото находится в 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