【发布时间】:2014-10-23 20:16:18
【问题描述】:
我制作了这个方法,它读取一个 csv 文件并将数据存储到一个包含在地图 Map 中的数组列表中。这个方法仅在 java 中运行良好。但是当我在 android 中实现它时它不起作用,并且应用程序崩溃..我整天都在尝试修复它,所以非常感谢任何帮助。谢谢..下面是我尝试通过从 sd 卡中读取 csv 文件在 android 中使用此方法。当我使用 get 方法时,它似乎崩溃了。下面你可以看到logcat。
public class New extends Activity {
private static Map<String, List<String>> values;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
FileReader fr = new FileReader(Environment.getExternalStorageDirectory() + "/" + "Android/data/"
+ getPackageName().toString()+ "/" + "SOPARC.csv");
values = parseCsv(fr, ",", true);
} catch (IOException e) {
e.printStackTrace();
}
values.get("Date").get(2);
}
public static Map<String, List<String>> parseCsv(Reader reader, String separator, boolean hasHeader) throws IOException {
Map<String, List<String>> values = new LinkedHashMap<String, List<String>>();
List<String> columnNames = new LinkedList<String>();
BufferedReader br = null;
br = new BufferedReader(reader);
String line;
int numLines = 0;
while ((line = br.readLine()) != null) {
if (StringUtils.isNotBlank(line)) {
if (!line.startsWith("#")) {
String[] tokens = line.split(separator);
if (tokens != null) {
for (int i = 0; i < tokens.length; ++i) {
if (numLines == 0) {
columnNames.add(hasHeader ? tokens[i] : ("row_"+i));
} else {
List<String> column = values.get(columnNames.get(i));
if (column == null) {
column = new LinkedList<String>();
}
column.add(tokens[i]);
values.put(columnNames.get(i), column);
}
}
}
++numLines;
}
}
}
return values;
}
【问题讨论】:
-
发布堆栈跟踪错误.. 或试试这个:code.google.com/p/secrets-for-android/source/browse/trunk/src/…
-
这有帮助吗?
-
这看起来不相关。
-
我很抱歉..错误的部分..我认为这应该是现在说明的问题
-
你还是没有说是哪一行,但是从NullPointer中猜测,可能是CSV解析失败,然后
values为空,然后你调用get就可以了。