Android Java Read与BufferedReader并行和AsyncTask多线程

亲爱的,我正准备从Google Cloud Firebase商店读取多个CSV文件。

我正在这样做:

new getcompaniesCsvFile().execute("companies.csv");

new GetLinesCsvFile().execute("lines.csv");

两个类都这样做:

    private static class GetLinesCsvFile
        extends AsyncTask<String,Integer,Reader>
    {
        @Override
        protected Reader doInBackground(String... tableName) {
            return getLinesCsvFile(tableName[0]);
        }

        @Override
        protected void onPostExecute(Reader reader) {
            importLinesFromCsv(reader);
        }
    }

    private static void importLinesFromCsv(Reader reader) {
        try {
            CsvReader csvReader = new CsvReader(reader);
            // nextLine[] is an array of values from the line
            while (csvReader.getHasnext()) {
                csvReader.readNext(linesStringArray);
            }
        } catch (Exception ex) {
            Log.d("CsvUtil",ex.getMessage());
        }
    }

我的readNext(列表列表)方法可以做到:

private static final class GetNextLine extends AsyncTask<Void,String>
implements ParseLine.TaskDelegate {

        private List<String[]> list;

        public GetNextLine(List<String[]> l) {
            list = l;
        }

        @Override
        protected String doInBackground(Void... companies) {
            try {
                return getNextLine();
            } catch (IOException ex) {
                Log.e("CsvReader",ex.getMessage());
            }
            return null;
        }

        @Override
        protected void onPostExecute(String nextLine) {
            if (nextLine != null) {
                ParseLine parseLine = new ParseLine(this);
                parseLine.execute(nextLine);
            }
        }

        @Override
        public void onTaskEndWithResult(String[] parseLine) {
            list.add(parseLine);
        }
    }

和ParseLine类:

    public static final class ParseLine extends AsyncTask<String,String[]> {
        private TaskDelegate delegate;

        public ParseLine(TaskDelegate delegate) {
            this.delegate = delegate;
        }

        public interface TaskDelegate {
            public void onTaskEndWithResult(String[] parseLine);
        }

        @Override
        protected String[] doInBackground(String... nextLine) {
            try {
                return parseLine(nextLine[0]);
            } catch (IOException ex) {
                Log.e("CsvReader",ex.getMessage());
            }
            return null;
        }

        @Override
        protected void onPostExecute(String[] parseLine) {
            if (parseLine != null && delegate != null)
                delegate.onTaskEndWithResult(parseLine);
        }
    }

仅读取第一个文件,我需要读取2个带有某些行和某些字段的CSV文件,但是应用程序只能使用AsyncTask读取一个文件,请您帮我,我在其中浪费了很多时间这个问题,请帮助我,非常感谢。

yegenting1 回答:Android Java Read与BufferedReader并行和AsyncTask多线程

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3088566.html

大家都在问