我是Android开发和Kotlin的新手,所以作为一个项目,我想在Android Studio中制作一个货币转换器。为此,我在我的assets文件夹中保存了一个货币列表文件,并希望读取该文件并将内容放入微调器中。下面是我的代码:
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Spinner
import java.io.File
import java.io.InputStream
import java.util.*
class currency_converter : AppCompatActivity() {
lateinit var currency_1: Spinner
lateinit var currency_2: Spinner
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_currency_converter)
val inputStream: InputStream = File("currency_list.txt").inputStream()
val currency_list = mutableListOf<String>()
inputStream.bufferedReader().useLines { lines -> lines.forEach { currency_list.add(it) } }
currency_1 = findViewById(R.id.currency_1) as Spinner
currency_2 = findViewById(R.id.currency_2) as Spinner
currency_1.adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, currency_list)
currency_2.adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, currency_list)
}
}
当我通过我的手机运行完整的模拟器时,它会打开,但当我点击currnecy转换器时,它会崩溃,并得到错误:
java.io.FileNotFoundException: currency_list.txt (没有这样的文件或目录)
如果能帮到我做错了什么,我将不胜感激。谢谢
发布于 2018-07-29 04:40:44
您必须使用assets
打开该文件:
val inputStream: InputStream = assets.open("currency_list.txt")
发布于 2018-07-29 04:46:58
要从文件中读取,请确保您的文件位于资源文件夹中。您将需要创建此文件。它会在你的java和res文件夹旁边。
assets/my_file.json
java/...
res/...
现在,我还建议对您尝试读取的任何文件使用json。这将使它变得更快,也将使它对您来说非常容易。
您将得到一个类似以下内容的文件。其中有一个对象(花括号)数组(方括号)。然后,您可以创建对象,就像在代码中设置对象一样。
{
"currencies": [
{
"name": "USD",
"value": 1.0
},
{
"name": "CAD",
"value": 0.65
},
{
"name": "AUS",
"value": 1.22
}
// any more currencies
]
// anything else you want to store
}
然后,您可以为您的货币创建一个类。
data class Currency( val name: String, val value: Float )
注意名称是如何相同的,并且使用Gson (Google的Json阅读器),它将为您绑定所有内容。
让我们创建另一个仅仅是文件结构的类,以使它更容易。
data class CurrencyFile( currencies: List<Currency> )
现在打开并读取该文件。
fun getCurrencyFile(context: Context) : CurrencyFile {
val stream = context.assets.open("my_file.json")
val size = stream.available()
val buffer = ByteArray(size)
stream.read(buffer)
stream.close()
return fromJson(String(buffer), CurrencyFile::class.java)
}
发布于 2018-07-29 04:41:04
您可以直接从应用程序访问资源:
val currencies = "currency_list.txt"
val currenciesString = application.assets.open(currencies).bufferedReader().use{ it.readText() }
https://stackoverflow.com/questions/51575024
复制相似问题