Я пытаюсь загрузить файл, загруженный в хранилище Firebase.
E / StorageUtil: ошибка при получении токена java .util.concurrent Исключение ):
private fun loadJson(context: Context,tagId: Int): String? {
var input: InputStream? = null
var jsonString: String
jsonString=""
mAuthListener = AuthStateListener { firebaseAuth ->
val user = firebaseAuth.currentUser
if (user != null) {
// User is signed in
Log.d(
"FirebaseAuth",
"onAuthStateChanged:signed_in:" + user.uid
)
} else {
// User is signed out
Log.d("FirebaseAuth", "onAuthStateChanged:signed_out")
}
// ...
}
mAuth = FirebaseAuth.getInstance();
if (mAuth!!.getCurrentUser() != null)
{
mAuth!!.getCurrentUser()?.reload();
}
else {
mAuth!!.signInAnonymously().addOnCompleteListener(this,
OnCompleteListener<AuthResult> { task ->
if (task.isSuccessful) {
Log.d(TAG, "signInAnonymously:success")
//jsonString=actuallyLoad() **//Place 1**
} else {
Log.w(TAG, "signInAnonymously:failure", task.exception)
}
})
}
//jsonString=actuallyLoad() **//Place 2**
return jsonString
}
Здесь я делаю запрос на файл json:
private fun actuallyLoad(): String {
var input: InputStream? = null
var jsonString: String=""
try {
var islandRef = storageReference?.child("productInfo/testFile.json")
val localFile = File.createTempFile("productInfo", "json")
val task: FileDownloadTask = islandRef!!.getFile(localFile)
try {
if (task.isSuccessful()) {
Toast.makeText(
this,
"File downloaded successfully.",
Toast.LENGTH_SHORT
).show()
try {
val reader =
BufferedReader(InputStreamReader(FileInputStream(localFile)))
val result = StringBuilder()
val line: String? = null
while (line + java.lang.String.valueOf(reader.read()) != null) {
Log.e("Test", "Result - $result")
result.append(line)
}
jsonString.plus(result.toString())
} catch (e: FileNotFoundException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
} else {
Log.e("Test", "Failed: " + task.exception)
Toast.makeText(this, "File downloading failed", Toast.LENGTH_LONG)
.show()
}
} catch (e: ExecutionException) {
e.printStackTrace()
} catch (e: InterruptedException) {
e.printStackTrace()
}
println(jsonString)
return jsonString
} catch (ex: Exception) {
ex.printStackTrace()
} finally {
input?.close()
}
return "Fail"
}
Итак, без аутентификационной части
val task: FileDownloadTask = islandRef!!.getFile(localFile)
выдает ошибку что мне нужно сначала войти в систему (хотя в другом упражнении я могу получать изображения без необходимости).
При аутентификации, если я помещаю вызов actuallyLoad()
в Место 1, то actuallyLoad()
не вызывается (как и другой код, который находится внутри mAuth!!.signInAnonymously().addOnCompleteListener
). Но я не получаю ошибку «Пожалуйста, войдите в систему». И анонимная учетная запись не создается в Firebase.
При аутентификации, если я помещаю вызов actuallyLoad()
в Place 2, тогда
val task: FileDownloadTask = islandRef!!.getFile(localFile)
выдает нужную мне ошибку войти сначала. И анонимная учетная запись создается в Firebase.
Решение было бы поместить actuallyLoad()
в mAuth!!.signInAnonymously().addOnCompleteListener
, но я не знаю, почему какой-либо код здесь не вызывается или не выполняется.
Само собой разумеется, что загрузка файла не будет работать, если не будет вызван actuallyLoad()
или если я получу ошибку входа в систему.
Заранее спасибо