java - openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

标签 java android

作为一名 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/

相关文章:

java - Cucumber:不允许扩展定义步骤定义或 Hook 的类

java - 每次用 java 检查一个框时更新所有 TextFields

java - TreeSet 比较器或 comparble.compareTo() 优先级

android - 更改 TabPageIndicator 页脚和文本颜色 (ViewPagerIndicator)

android - 如何使用 FirebaseRecyclerViewAdapter 在扁平结构 Firebase 中导航

java - 将 JQuery 添加到 java servlet

java - 如何在机器人框架中使用 "Choose File"关键字上传文件

android - 如何使用 Espresso 检查 DialogFragment 是否可见,然后才执行操作?

android - java.security.NoSuchAlgorithmException : no such algorithm: ECDSA for provider BC

android - 如何修改 android 默认键盘上的键(图像或标签)