亲爱的,我正准备从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读取一个文件,请您帮我,我在其中浪费了很多时间这个问题,请帮助我,非常感谢。