У меня возникают проблемы с использованием текстового файла, сохраненного во внутренней памяти моего приложения, и его использованием для определения того, какие растровые изображения будут отображаться на холсте и каково будет их размещение. Файл успешно создается моим приложением. Кажется, есть проблема с «filesDir», но только при определенных обстоятельствах.
Проблема в том, что когда я вставляю
val file: List<String> = File(this.filesDir, "TempLayoutData.txt").readLines()
внутри «класса Canvas» или «переопределить удовольствие onDraw», «filesDir» внезапно становится «неразрешенной ссылкой».
Итак, чтобы обойти это, я создал класс "Макет". Это выглядит так:
class Layout : AppCompatActivity(){
val file: List<String> = File(this.filesDir, "TempLayoutData.txt").readLines()
val stagewidth = file[0].toInt() * 10
val stagelength = file[1].toInt() * 10
var layout = Array(stagelength) { IntArray(stagewidth) }
var rowcounter = 0
var columncounter = 0
var read = File(this.filesDir, "TempLayout.txt").forEachLine {
for (i in it) {
layout[rowcounter][columncounter] = (i - 48).toInt()
columncounter++
}
rowcounter++
columncounter = 0
}
}
Я протестировал его внутри «override fun onCreate» моего класса ViewLayout (который также содержит класс Canvas), и он работал как шарм.
Когда он находится прямо внутри класса Canvas, воплощенного в жизнь с помощью
val layout = Layout()
он строится без ошибок, однако, когда я запускаю свое приложение на своем телефоне, возникает следующая ошибка: «Попытка вызвать виртуальный метод« java.io.File android.content.Context.getFilesDir () »для нулевой ссылки на объект "
Как источник ошибки, он указывает прямо на
val file: List<String> = File(this.filesDir, "TempLayoutData.txt").readLines()
внутри моего класса Layout, когда его экземпляр создается внутри класса Canvas.
И я просто не знаю, что делать. Я сделал некоторый поиск в Google, и буквально ничего не говорится о людях, пытающихся использовать файл во внутренней памяти приложения, чтобы основывать на нем свой рисунок.
Activity
- они являются важной частью платформы Android и будут работать неправильно, если они не запущены с намерением. - person Pawel   schedule 10.02.2019filesDir
— это методContext
, поэтому t должны расширить деятельность. Просто добавьте полеcontext
в свой классLayout
(инициализированный в конструкторе) и используйте его, чтобы получитьcontext.filesDir
вместоthis
. - person Pawel   schedule 11.02.2019