这是我的io.java文件的样子,它包含类“io”,它包含我的方法load()和save()。
package com.myschedules;
//FILE I/O
import java.io.*;
import android.content.Context;
public class io {
Context asdf;
//save file
public void save(String filename, String data) {
try {
FileOutputStream fos = asdf.openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(data.getBytes());
fos.close();
}
catch (Exception ex) {
}
}
//load file
public String load(String filename) {
try {
FileInputStream fis = asdf.openFileInput(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line = null, input="";
while ((line = reader.readLine()) != null) input += line;
reader.close(); fis.close();
return input;
}
catch (Exception ex) {
return "";
}
}
}
当我在main中调用这些方法时,它看起来像这样:
io login_io = new io();
String login_preferences = login_io.load("login_preferences.dat");
不幸的是,这只会导致我的应用在启动时崩溃。如何将load()和save()函数存储在一个单独的文件中,以免弄乱我的main。区划对我自己的组织来说非常重要。使用#include或import调用在其他语言中这很简单,但我在这里迷失了。
编辑:
好的,现在我有另一个问题......这是来自MainActivity.java。我想在点击一个按钮后做一些文件I / O.但是,它最终会在“io login_io = new io(this);”上产生此错误:
“构造函数io(new View.OnClickListener(){})未定义”
cmd_login.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
io login_io = new io(this);
String login_preferences = login_io.load("login_preferences.dat");
答案 0 :(得分:1)
您何时为asdf分配上下文?如果你不是,你就会遇到NullPointerException。
答案 1 :(得分:0)
崩溃可能是Context变量NullPointerException
上的asdf
。
您需要在构造函数中设置asdf
。
像这样添加构造函数:
// Constructor
public io(final Context context) {
asdf = context;
}
public void save... // do not change.
public String load... // do not change.
您还必须将活动/上下文'this'变量添加到MainActivity类中io
类的实例化中,如下所示:
更改强>:
io login_io = new io(); // Bad :(
到此:
io login_io = new io(this); // Good :)
P.S。我从下面的评论中了解到,MainActivity.java是一个Android Activity类(即“class MainActivity extends Activity
”),因此'this'是正确的类型。这是个好消息。