我已经编写了一些用于制作/编辑文件的功能,但它们运行良好。但是,我需要在许多活动中使用这些功能,所以我找到了关于如何全局化功能的指南,并以某种方式做到了。但是在我将我的函数放在单独的类中之后,它们就停止了工作。我的logcat无法正常工作,所以我无法尝试,但即使我可以,我也不认为它会对我有所帮助。
以下是MainActivity.java的一部分:
MyHelper myHelp = new MyHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myHelp.synchronizedb("filename");
}
以下是MyHelper.java的一部分:
public class MyHelper extends ActionBarActivity {
Context mContext;
public MyHelper(Context context){
this.mContext = context;
}
public void writeFile(String fname, String fcontent) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(openFileOutput(fname, MODE_APPEND)));
bw.write(fcontent);
bw.close();
}
public void synchronizedb(String filename) {
writeFile(filename, "blabla");
}
}
答案 0 :(得分:0)
您正在不正确地创建一个未被使用的类,如Activity子类扩展ActionBarActivity。为Activity的任何子类调用new
是行不通的,因为只有系统创建的Activity才能完全正常运行,并且只有在之后才能使用onCreate()方法由系统调用。
为了能够使用从Activity(和类似的)继承的方法(如openFileOutput()),你可能会使你的助手类成为一种假活动。但那是行不通的。
更可行的解决方案是放弃"扩展ActionBarActivity"从您的类名,并使用传入的上下文引用:
mContext.openFileOutput(...)
或者,或许甚至更好,在构造函数中发现了内部存储位置并保存以供以后使用:
public class MyHelper {
Context mContext;
File mDir;
public MyHelper(Context context){
this.mContext = context;
this.mDir = context.getFilesDir();
}
public void writeFile(String fname, String fcontent) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(new File(mDir, fname), MODE_APPEND)));
bw.write(fcontent);
bw.close();
}
此外,由于关于Activity类在调用onCreate()之后才能完全正常运行的规则,您必须将助手类的创建移动到利用Activity onCreate之后或之后( )
MyHelper myHelp; //can't initialize as our context is not yet valid
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myHelp = new MyHelper(this); //now we have a working context to pass
myHelp.synchronizedb("filename");
}