1

我正在编写一个 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 格式打开文件。这花了大约一个小时的编码并很好地解决了这个问题,所以我将考虑解决这个问题。

4

2 回答 2

1

首先,您需要调试您的代码并找出文件没有正确写入 SD 卡的原因(或者您可能只是在错误的地方寻找它?)。找到后,安装 SD 卡,然后尝试在 Excel/Open/LibreOffice 中打开以确保其格式正确。您可能希望使用 CSV 库(例如 opencsv)来生成 CSV 文件。处理空格、转义等可能很棘手,而且 QuickOffice 可能无法容忍格式错误的 CSV。

Google Docs 完全是另一回事,您需要使用用户的 Google 帐户进行身份验证,并使用 GDocs API/客户端库上传文件。

于 2011-09-26T01:41:56.070 回答
0

至少部分问题是文件格式。当我将“application/vnd.ms-excel”更改为“text/plain”时,我可以在文本文件中打开数据。这不太理想,因为它比在电子表格中打开时更难阅读。

我会继续寻找更好的答案。

更新(2011 年 10 月 9 日):

最后,我更好的答案是“使用 HTML 表格作为解决方法”。结果证明这是阻力最小的路径。请参阅我更新的问题以获得更长的解释。

于 2011-09-28T00:45:58.200 回答