我正在使用基于内容的Android App.I使用Firebase上传所有文本文件(在rtf或doc文件中)。在我将一个文本文件上传到Firebase后,我创建了一个详细的活动,从firebase下载文件但是文本文件没有被读取,它什么也没有显示。这是我的Kotlin代码...
class detailOne : AppCompatActivity() {
private var mTextView : TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.detailone)
val myButton = findViewById(R.id.butOne) as Button
mTextView = findViewById(R.id.myText) as TextView
FirebaseApp.initializeApp(this)
val storage = FirebaseStorage.getInstance()
val storageRef = storage.getReferenceFromUrl("gs://yehwot-eta.appspot.com/story.rtf")
try {
val localFile = File.createTempFile("text", "rtf")
storageRef.getFile(localFile).addOnSuccessListener {
}.addOnFailureListener {
print("Connection is Lost!Please Try Again")
}
}
} catch(e : IOException) {
e.printStackTrace()
}
myButton.setOnClickListener {
val myIntent = Intent()
myIntent.action = Intent.ACTION_SEND
myIntent.type = "text/plain"
myIntent.putExtra(Intent.EXTRA_TEXT,"This is my Text")
startActivity(myIntent)
}
}
}
答案 0 :(得分:0)
我有答案!为了使用文本文件,我不必加载到Firebase Storage.Instead我直接上传到Json格式的Firebase数据库。
答案 1 :(得分:0)
您可以将文件加载到Firebase存储中。这是允许在回收站视图内由Kotlin android应用程序片段“下载”并使用制表符分隔的文本文件的代码:
// get the file from firebase
val storage = FirebaseStorage.getInstance()
var storageRef = storage.reference
val seriesRef = storageRef.child("YourFileName.txt")
val localFile = File.createTempFile("YourFileName", "txt")
seriesRef.getFile(localFile).addOnSuccessListener {
// Local temp file has been created
activity?.let { fragmentActivity ->
try {
val lines: List<String> = localFile.readLines()
localFile.delete()
lines.forEach { seriesString ->
// check for header row
if (seriesString.contains(kSeriesHeaderString, true)) {
// do nothing for the header string
} else {
// set the image id
val series =
Series(
seriesString
)
series.imageId = resources.getIdentifier(
series.logoImageName.toLowerCase(Locale.ROOT), "drawable",
fragmentActivity.packageName
)
SeriesList.addSeries(series)
}
}
// get all series and set the series list
seriesList = SeriesList.getAllSeries()
seriesListRecyclerView.adapter?.notifyDataSetChanged()
} catch (e: Exception) {
Log.e(TAG, "-------------------------------------------------------")
Log.e(TAG, "ERROR: failed to read series file, stacktrace to follow.")
Log.e(TAG, "-------------------------------------------------------")
e.printStackTrace()
}
}
}.addOnFailureListener {
Log.e(TAG, "Failed to read $kStarWarsSeriesFileName: ${it.message}")
Toast.makeText(view?.context, "Failed to read $kStarWarsSeriesFileName:: ${it.message}", Toast.LENGTH_LONG).show()
}
此代码获取应用程序的firebase实例,并获取对该文件的引用。我的文件位于Firebase存储的根目录中。
文件保存在本地存储中。
如果标题存在,则逐行读取文件,跳过标题记录。
上一行后,删除了localFile,因为我不再需要保留该文件。就我而言,每次加载应用程序时都需要检索文件。
文件中的每一行都用于创建必要的“系列”实例
然后返回所有系列实例
尝试/捕获和异常处理也得到管理。