Android不创建/读取文件

时间:2012-03-21 21:44:30

标签: android eclipse serialization nullpointerexception

免责声明:我已经阅读了很多例子并阅读了文档。

这个问题包含3个课程。我的序列化类,一个处理I / O的辅助类,以及一个用于连接的活动。

我的序列化类看起来像这样:

public class EntityPlayer implements Serializable {

private static final long serialVersionUID = -7671612522335708108L;
String name = "foo";

public EntityPlayer() {
    name = "foo";

}

}

我的帮助程序类看起来像这样(这是繁重的工作):

public class Main {

static Object loadPlayer(Context c, String name) throws IOException,
        ClassNotFoundException {
    FileInputStream f = c.openFileInput(name);
    ObjectInputStream i = new ObjectInputStream(f);
    Object player = i.readObject();
    i.close();
    return player;
}

static void savePlayer(Context c, String name, EntityPlayer player) throws IOException {
    FileOutputStream f = c.openFileOutput(name, Context.MODE_PRIVATE);
    ObjectOutputStream o = new ObjectOutputStream(f);
    o.writeObject(player);
    o.flush();
    o.close();
}

}

然后最后,这就是我访问的方式(在坚果壳中):

public class DisplayInteract extends Activity implements OnClickListener {

EntityPlayer player = new EntityPlayer();  //by editing this line, my issue was fixed


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.g_interact);

    player = new EntityPlayer(ID, this);

    try {
        Main.savePlayer(player.name, player);
    } catch (IOException e) {
    }

    try {
        player = (EntityPlayer) Main.loadPlayer("Derp");
    } catch (ClassNotFoundException e) {
    } catch (IOException e) {
    }
}

}

基本上我在加载后对序列化类进行任何调用时都会得到一个NPE。我知道问题在于我正在保存文件,因为我可以通过eclipse中的Android文件浏览器告诉我没有文件。我知道问题也在于我是如何加载文件的,因为(我没有理想的方式)我让它在某一点工作(它创建了一个文件)但是我仍然无法访问任何数据NPE(因为我没有正确访问课程)

2 个答案:

答案 0 :(得分:2)

您没有指定应将文件保存到的路径。 使用Context中的openFileOutput()将其保存到您的应用程序数据文件夹中。

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);

答案 1 :(得分:1)

我不知道你是如何生成文件名的,但是你可能想确保你有可用的存储空间(可用空间/没有被usb大容量存储使用等)。尝试以下几点:

    //Is external storage available?
    String state = Environment.getExternalStorageState();
    if (!Environment.MEDIA_MOUNTED.equals(state))
    {
        //If we can't get storage, let the user know
        return;
    }

    //Create the actual file
    //The file should end up in /mnt/sdcard/Android/data/your.package.name/files/
    File dir = new File(Environment.getExternalStorageDirectory() + EXTERNAL_FILES_DIR_EXTENTION);

    //Make all needed directories if they do not exist
    dir.mkdirs();

    //Create the file
    File file = new File(dir, fileName);