作为一名 Android 开发新手,我遇到了一些奇怪的问题。我想创建一个类,它方法其他类- Activity -任何可以用于以某种特殊方式处理文件的类。假设为了简单起见,我们将记录一些内容。如果我在 Activity 中执行以下操作(例如在 OnClick 监听器中),则一切正常:
FileOutputStream fOut = openFileOutput("somefile", MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
osw.write("Very important foobar");
osw.flush();
osw.close();
但是当我尝试将其封装到某个类中并创建这样的单例时:
public class Logger extends BaseActivity {
//BaseActivity is the "init" class which extends Activity
public static final Logger INSTANCE = new Logger();
private Logger() {
// singleton
}
public boolean doLog (String whatToLog) {
try {
FileOutputStream fOut = openFileOutput("somefile", MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
osw.write(whatToLog);
osw.flush();
osw.close(); }
catch (IOException ioe) { ioe.printStackTrace(); }
return true; }
并从类似的其他 Activity 中调用它
Logger.INSTANCE.doLog("foobar");
应用程序因 NullPointerException 崩溃(与 openFileOutput 一致)。我想这是因为这里单例/Activity 使用不当,现在重写代码以作为服务运行。但也许有一些更好的想法来解决问题?或者一些解决方法?
提前感谢您的贡献!
最佳答案
您的单例基于您未作为 Activity 启动的 Activity 。因此,它没有 IO 调用所必需的有效上下文。请参阅布伦德尔的 answer为了获得更好的单例,需要进行一项更改:根据 android.app.Application javadoc,您的单例应该通过 Context.getApplicationContext() 从给定上下文获取应用程序上下文。请参阅why does AndroidTestCase.getContext().getApplicationContext() return null再举一个例子。
关于java - openFileOutput 在单例类中无法正常工作 - 想法/解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538955/