0

私は現在、次のメソッドに書き込みを行っています。

  • メモリからオブジェクトを読み取る
  • オブジェクトをメモリに書き込む

Stringオブジェクトを保存してもう一度読み込もうとしましたが、コードが機能しませんでした。

これは私のコードです:

public void writeObjectToMemory(String filename, Object object) {
        FileOutputStream fos;
        try {
            fos = game.openFileOutput(filename, Context.MODE_PRIVATE);
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(object);
            os.close();
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();

        } 
        catch (IOException e) {
            e.printStackTrace();

        }

    }

    public void readObjectFromMemory(String filename, Object object) {
        FileInputStream fis;
        try {
            fis = game.openFileInput(filename);
            ObjectInputStream is = new ObjectInputStream(fis);
            object = is.readObject();
            is.close();
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();

        } 
        catch (StreamCorruptedException e) {
            e.printStackTrace();

        } 
        catch (IOException e) {
            e.printStackTrace();

        } 
        catch (ClassNotFoundException e) {
            e.printStackTrace();

        }

    }
4

2 に答える 2

0

あなたが書いた :

public void readObjectFromMemory(String filename, Object object) {
    //...
    object = is.readObject();

ただし、objectこれは関数に渡した引数のコピーにすぎません。メソッド内でそのコピーを変更できますが(これは、実際のパラメーターには影響しません)。

代わりにオブジェクトを返す必要があります:

public Object readObjectFromMemory(String filename) {
    FileInputStream fis;
    Object obj;
    try {
        fis = game.openFileInput(filename);
        ObjectInputStream is = new ObjectInputStream(fis);
        obj = is.readObject();
        is.close();
    } 
    catch (...) {
        return null;
    }

    return obj;
}

詳細についてはこちらをお読みください:http ://www.cs.utoronto.ca/~dianeh/tutorials/params/

于 2012-06-26T16:06:05.920 に答える
0

興味のある人のための実用的なコードは次のとおりです。

注:を使用するreadObjectFromMemory(String filename, Object object)場合は、返されたオブジェクトをキャストする必要があります。

/**
     * <b><i>public void writeObjectToMemory(String filename, Object object)</i></b>
     * <br>
     * Since: API 1
     * <br>
     * <br>
     * Write a object to the phone's internal storage.
     * 
     * @param filename 
     * The name of the file you wish to write to.
     *
     *      
     */

    public void writeObjectToMemory(String filename, Object object) {
        FileOutputStream fos;
        try {
            fos = game.openFileOutput(filename, Context.MODE_PRIVATE);
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(object);
            os.close();
            this.gameEngineLog.d(classTAG, "Object successfully written: " + filename);
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();
            this.gameEngineLog.d(classTAG, "Object couldn't be opened: " + filename);

        } 
        catch (IOException e) {
            e.printStackTrace();
            this.gameEngineLog.d(classTAG, "Object couldn't be opened: " + filename);

        }

    }

    /**
     * <b><i>public Object readObjectFromMemory(String filename, Object object)</i></b>
     * <br>
     * Since: API 1
     * <br>
     * <br>
     * Read a object from the phone's internal storage.
     * 
     * @param filename 
     * The name of the file you wish to read from.
     *
     *      
     */

    public Object readObjectFromMemory(String filename, Object object) {
        Object defautObject = null;
        FileInputStream fis;
        try {
            fis = game.openFileInput(filename);
            ObjectInputStream is = new ObjectInputStream(fis);
            defautObject = is.readObject();
            is.close();
            this.gameEngineLog.d(classTAG, "Object successfully read: " + filename);
        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();
            this.gameEngineLog.d(classTAG, "Object couldn't be opened: " + filename);

        } 
        catch (StreamCorruptedException e) {
            e.printStackTrace();
            this.gameEngineLog.d(classTAG, "Object couldn't be opened: " + filename);

        } 
        catch (IOException e) {
            e.printStackTrace();
            this.gameEngineLog.d(classTAG, "Object couldn't be opened: " + filename);

        } 
        catch (ClassNotFoundException e) {
            e.printStackTrace();
            this.gameEngineLog.d(classTAG, "Object couldn't be opened: " + filename);

        }

        return defautObject;

    }
于 2012-06-26T16:19:57.273 に答える