使用kotlin for android app

时间:2018-04-08 08:21:30

标签: android firebase kotlin firebase-storage

我正在使用kotlin开发一个Android应用程序,将pdf文件上传到firebase存储 我遵循了一个教程,当涉及到运行时,我只能浏览我的文件,但是我无法选择任何要上传的文件是截图screenshot
这是mainActivity.kt的代码 在MainActivity类下:AppCompatActivity()

val pdf: Int=0
lateinit var uri:Uri
lateinit var mStorage: StorageReference

在onCreate()

 val pdfBtn=findViewById<Button>(R.id.pdfBtn)
    mStorage=FirebaseStorage.getInstance().getReference("Uploads")

    pdfBtn.setOnClickListener(View.OnClickListener {
        view: View-> val intent = Intent()
        intent.setType("pdf/*")
        intent.setAction(Intent.ACTION_GET_CONTENT)
        startActivityForResult(Intent.createChooser(intent,"Select PDF"),pdf)
    })

该方法的其余部分与上传

有关
  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    val uriTxt=findViewById<TextView>(R.id.uriTxt)
    if(resultCode== Activity.RESULT_OK){
        if(requestCode==pdf){
            uri=data!!.data
            uriTxt.text=uri.toString()
            upload()

        }
    }

    super.onActivityResult(requestCode, resultCode, data)
}



private fun upload(){
   var mRefrence= mStorage.child(uri.lastPathSegment)
   try{
   mRefrence.putFile(uri).addOnSuccessListener {
       taskSnapshot: UploadTask.TaskSnapshot? -> var url =taskSnapshot!!.downloadUrl
       val dwnTxt=findViewById<TextView>(R.id.dwnTxt)
               dwnTxt.text=url.toString()
       Toast.makeText(this,"Successfully uploaded",Toast.LENGTH_LONG).show()
   }
   }
   catch (e: Exception){
       Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show()
   }

}

有人可以纠正我的代码并告诉我它有什么问题。 非常感谢你

2 个答案:

答案 0 :(得分:0)

如果有人想知道问题是在

类型中
intent.setType("pdf/*")

更正是

intent.type="application/pdf"

答案 1 :(得分:0)

我创建了这个实用程序类,以便在协程的帮助下使用kotlin将多个图像上传到Firebase存储。如果您有任何改进,请告诉我。

您需要首先添加这些依赖项。

实现'com.google.firebase:firebase-storage-ktx:19.1.1'

// Firebase通过kotlinx-coroutines-play-services库为Coroutines添加了支持

实现“ org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.1”

有关更多信息,请检查linkgithub link

private suspend fun uploadPhoto(file: File): Uri {
val storageRef = Firebase.storage.reference
        val fileName = UUID.randomUUID().toString()
        val fileUri = Uri.fromFile(file)

        return storageRef.child(fileName)
            .putFile(fileUri)
            .await()
            .storage
            .downloadUrl
            .await()
.
    }
}