首先,這是更新后的專案:https ://github.com/DoomedyDoomed/ShareSomePics
編輯
此代碼是 activityForResult() 的舊用法。我在下面分享了我已解決的代碼。只需它適用于 opennig 圖庫,選擇影像并將其與 Bitmap 一起存盤以將其上傳到資料庫。我從這里的這篇文章中得到了幫助。
這是那篇文章幫助我的部分:
fun openSomeActivityForResult() {
val intent = Intent(this, SomeActivity::class.java)
resultLauncher.launch(intent)
}
var resultLauncher = registerForActivityResult(StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// There are no request codes
val data: Intent? = result.data
doSomeOperations()
}
}
這是舊的使用方式。
class SharePhotograph : AppCompatActivity() {
private var pickedImage : Uri? = null
private var pickedBitmap : Bitmap? = null
private lateinit var storage : FirebaseStorage
private lateinit var auth : FirebaseAuth
private lateinit var database : FirebaseFirestore
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_share_photograph)
val imageSelect = findViewById<ImageView>(R.id.imageView)
val butShare = findViewById<Button>(R.id.butShare)
val userCommentText = findViewById<TextView>(R.id.userCommentText)
storage = FirebaseStorage.getInstance()
auth = FirebaseAuth.getInstance()
database = FirebaseFirestore.getInstance()
imageSelect.setOnClickListener{
pickImage()
}
butShare.setOnClickListener{
//Storage Process
//UUID -> Universal Unique ID
val uuid = UUID.randomUUID()
val imageName = "${uuid}.jpg"
val reference = storage.reference
val imageReference = reference.child("images").child(imageName)
if (pickedImage != null){
imageReference.putFile(pickedImage!!).addOnSuccessListener { taskSnapshot ->
val uploadedImageReference = FirebaseStorage.getInstance().reference.child("images").child(imageName)
uploadedImageReference.downloadUrl.addOnSuccessListener { uri ->
val downloadUrl = uri.toString()
val currentUserEmail = auth.currentUser!!.email.toString()
val userComment = userCommentText.text.toString()
val date = Timestamp.now()
//Database Process
val postHashMap = hashMapOf<String, Any>()
postHashMap["Image URL"] = downloadUrl
postHashMap["User Email"] = currentUserEmail
postHashMap["User Comment"] = userComment
postHashMap["Post Date"] = date
database.collection("Post").add(postHashMap).addOnCompleteListener { task ->
if(task.isSuccessful){
Toast.makeText(this,"Uploaded!",Toast.LENGTH_SHORT).show()
finish()
}
}.addOnFailureListener { exception ->
Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_LONG).show()
}
}.addOnFailureListener { exception ->
Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_LONG).show()
}
}
}
}
}
private fun pickImage(){
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//No Permission
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),1)
}else {
//If Already Had Permission
val galleryIntent = Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(galleryIntent,2)
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == 1){
if(grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
val galleryIntent = Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(galleryIntent,2)
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == 2 && resultCode == Activity.RESULT_OK && data != null){
pickedImage = data.data
if (pickedImage != null){
if (Build.VERSION.SDK_INT >= 28)
{
val source = ImageDecoder.createSource(this.contentResolver,pickedImage!!)
pickedBitmap = ImageDecoder.decodeBitmap(source)
val imageSelect = findViewById<ImageView>(R.id.imageView)
imageSelect.setImageBitmap(pickedBitmap)
}
else
{
pickedBitmap = MediaStore.Images.Media.getBitmap(this.contentResolver,pickedImage)
val imageSelect = findViewById<ImageView>(R.id.imageView)
imageSelect.setImageBitmap(pickedBitmap)
}
}
}
super.onActivityResult(requestCode, resultCode, data)
}
}
uj5u.com熱心網友回復:
我終于解決了代碼。感謝所有試圖提供幫助的人。我相信很多像我這樣的人(初學者)正在從舊視頻中學習并且會遇到這個問題。我希望這有幫助!
比較兩個代碼并將其用于您的方式。
class SharePhotograph : AppCompatActivity() {
private var pickedImage : Uri? = null
private var pickedBitmap : Bitmap? = null
private lateinit var storage : FirebaseStorage
private lateinit var auth : FirebaseAuth
private lateinit var database : FirebaseFirestore
private var resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// There are no request codes
val data: Intent? = result.data
pickedImage = data?.data
if (pickedImage != null){
if (Build.VERSION.SDK_INT >= 28)
{
val source = ImageDecoder.createSource(this.contentResolver,pickedImage!!)
pickedBitmap = ImageDecoder.decodeBitmap(source)
val imageSelect = findViewById<ImageView>(R.id.imageView)
imageSelect.setImageBitmap(pickedBitmap)
}
else
{
pickedBitmap = MediaStore.Images.Media.getBitmap(this.contentResolver,pickedImage)
val imageSelect = findViewById<ImageView>(R.id.imageView)
imageSelect.setImageBitmap(pickedBitmap)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_share_photograph)
val imageSelect = findViewById<ImageView>(R.id.imageView)
val butShare = findViewById<Button>(R.id.butShare)
val userCommentText = findViewById<TextView>(R.id.userCommentText)
storage = FirebaseStorage.getInstance()
auth = FirebaseAuth.getInstance()
database = FirebaseFirestore.getInstance()
imageSelect.setOnClickListener{
pickImage()
}
butShare.setOnClickListener{
//Storage Process
//UUID -> Universal Unique ID
val uuid = UUID.randomUUID()
val imageName = "${uuid}.jpg"
val reference = storage.reference
val imageReference = reference.child("images").child(imageName)
if (pickedImage != null){
imageReference.putFile(pickedImage!!).addOnSuccessListener {
val uploadedImageReference = FirebaseStorage.getInstance().reference.child("images").child(imageName)
uploadedImageReference.downloadUrl.addOnSuccessListener { uri ->
val downloadUrl = uri.toString()
val currentUserEmail = auth.currentUser!!.email.toString()
val userComment = userCommentText.text.toString()
val date = Timestamp.now()
//Database Process
val postHashMap = hashMapOf<String, Any>()
postHashMap["Image URL"] = downloadUrl
postHashMap["User Email"] = currentUserEmail
postHashMap["User Comment"] = userComment
postHashMap["Post Date"] = date
database.collection("Post").add(postHashMap).addOnCompleteListener { task ->
if(task.isSuccessful){
Toast.makeText(this,"Uploaded!",Toast.LENGTH_SHORT).show()
finish()
}
}.addOnFailureListener { exception ->
Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_LONG).show()
}
}.addOnFailureListener { exception ->
Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_LONG).show()
}
}
}
}
}
private fun pickImage(){
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//No Permission
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),1)
}else {
openGallery()
}
}
private fun openGallery() {
val galleryIntent = Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
resultLauncher.launch(galleryIntent)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/494039.html
