我正在编写一个Android应用程序,该程序以逗号分隔值的字符串的形式收集数据(以“ \ n”结尾的每一行),然后每月通过电子邮件向我发送一次数据。
我的一位Beta测试人员告知我,他希望能够查看上传之间的中间数据。 (在我看来)执行此操作的自然方法是将数据加载到“类似于Excel”的应用(例如QuickOffice或Google文档的查看器)。我尝试将字符串写出到文件中,然后将其加载到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的形式打开文件。这花费了大约一个小时的编码,并且很好地解决了这个问题,所以我将考虑解决该问题。
最佳答案
首先,您需要调试代码并弄清楚为什么文件未正确写入SD卡(或者您只是在错误的位置寻找它?)。找到它后,安装SD卡,并尝试在Excel / Open / LibreOffice中打开以确保其格式正确。您可能要使用CSV库(例如opencsv)来生成CSV文件。处理空格,转义符等可能很棘手,并且QuickOffice可能无法接受格式错误的CSV。
Google Docs完全是另一回事,您需要使用用户的Google帐户进行身份验证,然后使用GDocs API /客户端库上传文件。