2011-07-11 114 views
0

我使用三个文件来存储本地数据,对于我的应用程序,其中两个会在应用程序启动时进行检查并远程更新(如果有更新的版本可用或文件尚不存在)。第三种是在应用程序运行时可以定期存储的用户数据。Android FileOutputStream方法'忽略'

三者都使用同样的方法来保存文件:

public boolean setLocalFile(String Filename, String FileText, Context con) { 
    try { 
     FileOutputStream fos = con.openFileOutput(Filename, Context.MODE_PRIVATE); 
     fos.write(FileText.getBytes()); 
     fos.close(); 
     return true; 
    } catch(Exception e) { 
     handleError(e); // local method that simply does a System.out.println 
     return false; 
    } 
} 

现在第三个文件写入很好,但前两个(即检查和书面上启动)不写在所有。在调试,它看起来好像setLocalFile方法没有抛出异常或崩溃的应用程序和报告的唯一错误日志是完全跳过似乎是:

07-11 16:14:13.162: ERROR/AndroidRuntime(1882): ERROR: thread attach failed 
07-11 16:14:18.882: ERROR/gralloc(62): [unregister] handle 0x3bfe40 still locked (state=40000001) 

我还没有发现任何有用的东西在网上,关于这些不幸的是。

它让我难住 - 我不知道为什么它不写在这种特殊情况下。有任何想法吗?

+0

也许如果你向我们展示了代码,你称之为代码,并且它跳过了,它将更容易帮助... – MByD

+0

最突出的东西是大写变量名...... :( – Otra

回答

0

迟到的更新......给出代码出现这个问题可能不会太实际,因为我怀疑实际上需要我所有的代码完全检查它。

我的变量名以大写字母开头,很大程度上是因为我在与其他语言约10年后再次回到Java,所以花了我一段时间才回到事物的摆动 - 不是很美,但我如果它会有所作为,会感到惊讶。尽管如此,感谢球员们的回应。

问题的背景是我决定将这些文件中的数据作为类对象来处理。因此,草稿对象将包含所有草稿文档,而类构造函数将调用getLocalFile方法并将其存储在本地的类中,从而允许我在使用它(使用各种get/set类型方法)之前对其进行处理,然后再次将其写入文件用'commit'方法(调用setLocalFile)。

有很多这样的类对象被调用,但从未为每个数据文件实例化过多个类对象。什么让我难过的是一切正常,除了FS操作被忽略。一旦我直接访问文件(忽略我写的类封装),问题就消失了。

类包装器在应用程序的其他部分工作正常,而且这个问题只发生在一个复杂且相当密集的部分。正如我所说,我只是在长期缺席(而且已经发生了很大变化)后才回到Java,但考虑到这个问题以及它是如何“解决”自己的,我的猜测是它是某种形式的线程/内存问题 - 基本上我是从太多的对象访问FS,并最终决定它不想再玩。

正如我所说,问题已得到解决,但它让我感到困惑,因为该解决方案不允许我优雅地将我的数据对象包装为。如果有人可能会建议可能的原因/解决方案,我会很乐意尝试并报告,否则这种回应可能会帮助有类似问题的人在未来 - 至少找到一个不合格解决方案...