好的,我们已经完成了一次上去一个照片,那如果使用者有好几张照片呢? 他可能会希望多给几张照片的话,那我们就给他一次可以多选择吧!!
因为我们要变成多张了,所以我们要把原本的String,改成List,新增以下
val photoUriList: List<String>? = null
我们原本是单选,现在我们要把它新增成为可以选择多样的方式,直接在AddInvitationFragment里面的 checkPermission(),修改Intent
val intent = Intent(
Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,true)
resultLauncher.launch(intent)
再过来我们也要去我们的resultLauncher修改成拿到多张照片,原本拿到的方式是data.data(拿到一张),现在我们现在透过data.clipData就可以拿到多张照片啦!
private val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ uri ->
if (uri.resultCode == Activity.RESULT_OK){
val selectedUri = uri.data?.clipData
if (selectedUri != null){
val list = mutableListOf<Uri>()
val account = selectedUri.itemCount
//在这边把它加入list
for (i in 0 until account){
val model = selectedUri.getItemAt(i).uri
list.add(model)
}
//并传入viewModel
matchingViewModel.saveImageToFireStorage(requireActivity(),this,list)
}
}
}
看了一下Firebase的文档,好像没有一次上传多张照片的方式,所以这边就用for loop 分次上传,且因为Firebase会自动异步,所以我们在上传成功的时候,判断是否全部都传完了,传完了就把资料丢进Fragment
//我们要把传入的单笔url改成list
fun saveImageToFireStorage(activity: Activity, fragment: AddInvitationFragment, list: List<Uri>) {
val newList = mutableListOf<Uri>()
for (i in list.indices){
val sdf: StorageReference = FirebaseStorage.getInstance().reference.child(
Constant.PET_IMAGE + "_" + System.currentTimeMillis() + "_" + Constant.getFileExtension(
activity,
list[i]
)
)
sdf.putFile(list[i])
.addOnSuccessListener { it ->
it.metadata?.reference?.downloadUrl
?.addOnSuccessListener { uri ->
newList.add(uri)
Timber.d("测试 uri: $uri")
if (i == list.size-1){
Timber.d("得到的所有可下载 uri $newList listSize:${newList.size}")
fragment.saveImageSuccessful(newList)
}
}
?.addOnFailureListener {
fragment.saveImageFail(it.toString())
}
}
.addOnFailureListener {
fragment.saveImageFail(it.toString())
}
}
}
在最上面新增
private var selectedUriList: List<String> = listOf()
因为我们的Firestore不接受Url的格式,所以我们要把它改成String在传上去!
fun saveImageSuccessful(uriList: List<Uri>){
showSnackBar(resources.getString(R.string.update_pet_image_successful),false)
val list = mutableListOf<String>()
for (element in uriList){
val model = element.toString()
list.add(model)
}
selectedUriList = list
}
这样就完成罗!! 接下来明天将会把它显示出来!
>>: Day24 NiFi 延伸应用 - Slack & Email
分享一些我很喜欢的学习资源 有看到新的好资源会陆续更新 Computer Science 计算机概论...
大家好,我是西瓜,你现在看到的是 2021 iThome 铁人赛『如何在网页中绘制 3D 场景?从 ...
今天要体验的工具是macchanger,从介绍就一目了然其用途是拿来进行MAC地址欺骗,可以暂时修改...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 选取元素 ⚠️ 避免使用会常常变的s...
Springboot HelloWorld ...