作为Android新手开发人员,我遇到了一个奇怪的问题.我想创建一个类,该类可以使用其他方法使用其他类-活动-以某种特殊方式处理文件.为了简单起见,我们将记录一些东西.如果我在某个活动中进行了跟踪(例如在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 Activitypublic 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; }
并从其他活动中调用它
Logger.INSTANCE.dolog("foobar");
NullPointerException(与openfileOutput一致)导致应用崩溃.我想是因为这里不恰当地使用单例/活动,现在重写了代码以作为服务运行.但是也许有一些更好的想法可以解决问题?还是一些解决方法?
感谢您的预先贡献!
解决方法:
您将单例基于未作为活动开始的活动.因此,它没有有效的上下文,这对于IO调用是必需的.请参阅Blundell的answer,以获得更好的单例,并进行以下更改:根据androID.app.Application javadoc,您的单例应通过Context.getApplicationContext()从给定上下文中获取应用程序上下文.另一个示例请参见why does AndroidTestCase.getContext().getApplicationContext() return null.
总结以上是内存溢出为你收集整理的java-openFileOutput在单例类中不能正常工作-想法/解决方法?全部内容,希望文章能够帮你解决java-openFileOutput在单例类中不能正常工作-想法/解决方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)