【MainActivity.kt】のshare()の部分でuploadFileメソッドの第一引数にfileNameという引数を渡しました。
class ~~~ var fileName = "" private fun share() { viewModel.uploadFile(fileName, repository = StorageRepository()) }
fileNameは別のActivityで以下のように作成してます
private fun makeSaveFile(): String { val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.JAPAN).format(Date()) val folder = this.activity?.getExternalFilesDir(null) val fileName = "sharephoto" + timeStamp val file = File(folder, fileName) return file.absolutePath }
uploadFileメソッドは【ViewModel.kt】で以下のように定義しています
class ViewModel : ViewModel() { fun uploadFile(fileName: String, repository: StorageRepository = StorageRepository()) { viewModelScope.launch { try { val firebasePath = "userId/url/voice.mp4" val stream = FileInputStream(File(fileName)) val result = async { repository.upload(stream, firebasePath) }.await() if (result.isSuccessful) { print("isSuccess is true") } else { print("isSuccess is false") } } catch (e: Exception) { } } } }
デバッガでfileNameの値を追ってみると、【MainActivity.kt】ではfileNameの値として作成したファイルの名前がはいっているのですが、uploadFile()の呼び出し先の【ViewModel.kt】に入るとfileNameの値が空になってしまいます。Logcatを見ると
java.lang.IllegalArgumentException: Cannot upload to getRoot
とあり、「IllegalArgumentException」について調べると、引数が不正な時に出ると書いてありました。おそらく、【ViewModel.kt】のuploadFile()で引数としてfileNameを置いた時の型が間違っているのかなと考えているのですが、StringのfileNameをStringで受取っているので、間違っているとも思えません。一体何がダメなのでしょうか。心が折れそうです。
回答1件
あなたの回答
tips
プレビュー