我正在编写一个Android应用程序,它将数据收集为逗号分隔值的字符串(用'\ n'终止每一行),然后每月向我发送一次数据。
我的一位测试人员告诉我,他希望能够在上传之间查看中间数据。 (我认为)执行此操作的自然方式是将数据加载到“类似excel”的应用程序(例如QuickOffice或google doc的查看器)。我尝试将String写入文件,然后将其加载到QuickOffice中。我可以启动QuickOffice,但文件出现空白。另外,当我在SD卡上查找文件时,我找不到它。
我的代码:
File root = Environment.getExternalStorageDirectory();
try
{
BufferedWriter out = new BufferedWriter(new FileWriter(root.toString() + "/ww.csv"));
out.write(getPreferences(MODE_PRIVATE).getString("allTrips", ""));
out.flush(); // Probably not necessary
out.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent i1 = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.fromFile(new File(root.toString() + "/ww.csv"));
i1.setDataAndType(data, "application/vnd.ms-excel");
startActivity(i1);
请让我知道我做错了什么。我愿意对上面的代码进行小的调整,以及完成工作的完全不同的方法。
在你提问之前,我记得要添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
到我的清单。
另外,我很乐意写入内部文件系统而不是SD卡(我的数据很小)但我甚至无法打开QuickOffice。
数据的一个例子:
09/19/2011,AP2,Home,GW Parkway,12:03 PM,12:41 PM,38,Dry,Day
09/20/2011,Home,AP2,MacArthur Blvd,7:18 AM,8:32 AM,74,Rain,Day
09/20/2011,AP2,Home,Rock Creek Pkwy (Blagden),4:51 PM,5:45 PM,54,Dry,Day
09/21/2011,Home,AP2,Rte 295,6:44 AM,7:36 AM,52,Rain,Day
感谢。
更新(2011年10月9日):
有时在编写代码时,您需要退后一步,重新考虑您要完成的任务。我想要做的就是重新格式化我的临时数据,并为用户创建一个易于阅读的表,可以看到每月上传之间的数据。我想最简单的方法是将我的.csv文件加载到电子表格中。 Nikolay建议使用外部库来确保我的文件格式正确可能有效,但我试图让这个应用程序尽可能精简,所以我想避免不必要地使用(并学习使用)外部库。所以,我的最终解决方案是使用html格式将更大的文件写入SD卡,然后以text / html而不是text / plain或application / vnd.ms-excel打开文件。这花费了大约一个小时的编码并很好地解决了这个问题,所以我将考虑关闭问题。
答案 0 :(得分:1)
首先,您需要调试代码并弄清楚为什么文件没有正确写入SD卡(或者您只是在错误的地方寻找它?)。找到后,安装SD卡,并尝试在Excel / Open / LibreOffice中打开以确保其格式正确。您可能希望使用CSV库(例如opencsv)来生成CSV文件。处理空间,逃逸等可能会非常棘手,QuickOffice可能无法容忍格式错误的CSV。
Google Docs完全是另一回事,您需要使用用户的Google帐户进行身份验证,并使用GDocs API /客户端库上传文件。
答案 1 :(得分:0)
至少部分问题是文件格式。当我将“application / vnd.ms-excel”更改为“text / plain”时,我可以在文本文件中打开数据。这不太理想,因为它比在电子表格中打开更难阅读。
我会继续寻找更好的答案。
更新(2011年10月9日):
最后,我更好的答案是“使用HTML表作为解决方法”。事实证明这是阻力最小的道路。有关更长的解释,请参阅我的更新问题。