Есть ли способ открыть файл из неактивного класса в Kotlin на Android? - PullRequest
0 голосов
/ 05 декабря 2018

У меня в приложении неактивный класс Kotlin.Поскольку у него нет визуального стимула для пользователя, я не превратил его в действие.

Класс извлекает список из файла, который я помещаю в папку res/raw.В соответствии с документацией по Android, я использую openRawResource(), для которого требуется контекст.

Другие подобные вопросы в Java показывают, что переменная объявляется как переменная, но когда я делаю это в Kotlin, она говорит мне, чтоvariable _context must be initialized.Пока это мой код:

val _context:Context = object: Context()
val _ignorereader = _context.getResources().openRawResource(R.raw.ignorelist).bufferedReader()
val _ignorelist = _ignorereader.readLines().toTypedArray().toList()
return _ignorelist

Сейчас я получаю сообщение об ошибке: Expecting a class body из первой строки.

Есть ли способ открыть файлы в неактивном режиме?классы?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018
  1. Создать класс приложения
class AppClass : Application()
{
    override fun onCreate() {
        super.onCreate()
        context = this
    }
    companion object {
        var context: Context? = null
            internal set
    }
}
Объявление класса приложения в манифесте.под тегом приложения.
 <application
        android:name=“.AppClass"
Создать класс для чтения файла из необработанной папки
class ReadFile {
    fun ReadXmlFile(): List<String>
    {
        val dataList = ArrayList<String>()
        var factory: XmlPullParserFactory? = null
        var data = ""
        try {
            factory = XmlPullParserFactory.newInstance()
            val xpp = factory!!.newPullParser()
            val open = App.context!!.resources.openRawResource(R.raw.datafile)
            xpp.setInput(open, "UTF_8")

            var eventType = xpp.eventType
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {

                    if (xpp.name.equals("Data", ignoreCase = true)) {
                        xpp.next()
                        data = xpp.text
                        dataList.add(data)

                    }
                } else if (eventType == XmlPullParser.END_TAG) {
                }

                eventType = xpp.next() // move to next element
            }
        } catch (e: XmlPullParserException) {
            e.printStackTrace()
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return dataList;
    }

}
Пример файла datafile.xml в необработанной папке
<?xml version="1.0" encoding="utf-8"?>
<main>
    <item>
        <Data>Data 1.</Data>
    </item>

    <item>
        <Data>Data 2.</Data>
    </item>
</main>
Чтение файла в действии
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

       val  dataList = ReadFile().ReadXmlFile()
        Log.d("TAG", dataList.toString());
    }
}
0 голосов
/ 05 декабря 2018

вам нужен контекст для доступа к ресурсу.вы можете объявить контекст приложения в классе приложения.

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        context = this
    }
    companion object {
        var context: Context? = null
            internal set
    }
}

использовать этот контекст в любом месте приложения, как это.

fun test() {
        val _ignorereader = App.context.getResources().openRawResource(R.raw.test).bufferedReader()
        val _ignorelist = _ignorereader.readLines().toTypedArray().toList()
        return _ignorelist
    }

также убедитесь, что вы объявили приложение в своем манифесте.

<application
        android:name=".App"
......>
</application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...