Как быстро и быстро прочитать файл .txt из папки активов в Android Studio? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть текстовый файл в папке с активами, где он содержит около 15000 строк, я хочу перебрать каждую строку, я применил логику с помощью BufferedReader, но это занимает слишком много времени, чтобы перебрать каждую строку (1мин +) .

Теперь мне нужно сократить время чтения каждой строки, чтобы максимизировать UX.

AsyncTask<Void, String, Void> asyncTask = new AsyncTask<Void, String, Void>() {
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            appBarLayout.setVisibility(View.VISIBLE);
            viewpager.setVisibility(View.VISIBLE);
            splashScreen.setVisibility(View.GONE);
            gamesLoaded = true;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            makeRandomText(gameRandomText, "Random Text" + new Random().nextInt(1000));
        }
        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            gamePercentage.setText(values[0]);
        }
        @Override
        protected Void doInBackground(Void... voids) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(
                        new InputStreamReader(getAssets().open("games.txt"), "UTF-8"));

                int startingCount = 0;
                // do reading, usually loop until end of file reading
                String mLine;
                while ((mLine = reader.readLine()) != null) {
                    Game gameAdded = new Game(mLine);
                    addGame(database, gameAdded);
                    startingCount++;
                    String percentage = startingCount * 100 / Constants.GAMES_COUNT + "%";
                    publishProgress(percentage);
                }
            } catch (IOException e) {
                //log the exception
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        //log the exception
                    }
                }
            }
            return null;
        }
    };

My assets folder

1 Ответ

0 голосов
/ 19 ноября 2018

Не зная, сколько времени потребуется для выполнения addGame, трудно сказать наверняка, но я подозреваю, что проблема заключается в использовании runOnUiThread. Вы сказали, что ваш файл содержит 15000 строк, поэтому он будет создавать и планировать обновление, которое обработчик пользовательского интерфейса должен запускать для каждого элемента в соответствии с настройкой.

Что вы не знаете, так это то, что AsyncTask имеет встроенный способ обработки прогресса, который обрабатывает отладку запроса для вас. Изучите методы publishProgress и onProgressUpdate для обработки обновлений пользовательского интерфейса.

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