Заполните строку [] строками из .txt в Android - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь отобразить случайные строки из temp.txt файла в Android.

Это мой код, который генерирует текст:

String quote[] ={"a","b","c"};

public void makeQuote(){
    Random rand = new Random();
    int num = rand.nextInt(quote.length);
    textQuot.setText(quote[num]);
}

Это решение работает и дает мне случайный вывод того, что находится внутри массива String.

Теперь я попытался заполнить String[] текстом из temp.txt файла следующим образом:

AssetManager manager = getAssets();
InputStream in = manager.open("temp.txt");
List<String> lines = IOUtils.readLines(in,"UTF-8");

String quote[] = lines.toArray(new String[0]);

public void makeQuote(){
    Random rand = new Random();
    int num = rand.nextInt(quote.length);
    textQuot.setText(quote[num]);
}

Но приложение просто падает в начале. По сути, я просто хочу показать случайные строки из файла temp.txt и попытаться сделать это, заполнив String Array этими строками.

Также у меня есть этот код, но я не знаю, как перейти к makeQuote() метод и генерировать случайный контент из файла.

private List<String> getQuotes() {
    List<String> quotes = new ArrayList<>();
    BufferedReader buff = null;
    try {
        buff = new BufferedReader(new InputStreamReader(this.getAssets().open("temp.txt"), "UTF-8"));
        String line;
        while ((line = buff.readLine()) != null) {
            quotes.add(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (buff != null) {
            try {
                buff.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return quotes;
}

1 Ответ

0 голосов
/ 20 апреля 2020

Расположение файла

Вы можете поместить свой файл в каталог raw в assets, поэтому путь к нему должен быть таким:

/app/src/main/res/raw/temp.txt

После этого вы можете получить доступ к этот файл, используя:

R.raw.temp

Изменение кода

Только на вещи, которую вы должны изменить, есть строка:

buff = new BufferedReader(new InputStreamReader(this.getAssets().open("temp.txt"),"UTF-8"));

, которую вы должны заменить:

buff = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.temp), "UTF-8"));

где вместо:

getAssets().open("temp.txt")

вы используете:

getResources().openRawResource(R.raw.temp)

Как получить случайную цитату

1) Получить все quotes из файл (из res/raw/)

2) Проверьте, все ли цитаты прочитаны правильно (поэтому ваш список НЕ пуст)

3) Нарисуйте число (из правильного диапазона!)

4) Получить элемент из списка, который находится на нарисованной позиции

List<String> quotes = getQuotes();

if (!quotes.isEmpty()) {
    int randomPosition = new Random().nextInt(quotes.size());
    String quote = quotes.get(randomPosition);
}

Случайный

Код

new Random().nextInt(20);

возвращает вам одно случайное значение из диапазона :

0 .. 19

Положение внутри списка (или массивов) начинается с 0, поэтому мы можем использовать quotes.size(), поскольку оно возвращает значение из диапазона:

0 ... quotes.size()-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...