我正在编写一个 Android 应用程序,它以逗号分隔值字符串的形式收集数据(每行以 '\n' 结尾),然后每月通过电子邮件向我发送一次数据。
我的一位 Beta 测试人员告诉我,他希望能够查看上传之间的中间数据。执行此操作的自然方法(在我看来)是将数据加载到“类似 Excel”的应用程序(例如 QuickOffice 或 google doc 的查看器)。我尝试将字符串写入文件,然后将其加载到 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 格式打开文件。这花了大约一个小时的编码并很好地解决了这个问题,所以我将考虑解决这个问题。