0

readObject()その内容をオブジェクト変数に転送する方法が見つからないようです。Load 関数をステップ実行すると、「temp = (HashMap) ois.readObject();」が表示されます。この行が実行される前HashMap'sに、式ウィンドウで oos で書き込んだデータを見ることができるEclipseので、データがそこにあることがわかりますが、この行が実行されるIOExceptionと、EOF. 私が読んだことから、これは予想されることですが、EOF をキャッチする方法が見つかりませんでした (available() でループし、readObjectInt()機能しませんでした)。これをAndroidエミュレーターで実行しています。任意の提案をいただければ幸いです。

public void Save(Pottylog data)
{
    try 
    {
        FileOutputStream fos = openFileOutput("Plog", Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(data.get());
        oos.close();
    }
    catch (FileNotFoundException ex)
    {
        ex.printStackTrace();
    }
    catch (java.io.IOException e)
    {
        e.printStackTrace();
    }
}

public HashMap<String, Integer> Load()
{
    HashMap<String, Integer> temp = null;

    try 
    {
        FileInputStream fis = openFileInput("Plog");
        ObjectInputStream ois = new ObjectInputStream(fis);
        temp = (HashMap<String, Integer>) ois.readObject();

    } 
    catch (FileNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    } 
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (ClassNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }

    return temp;
}
4

1 に答える 1

0

EOFExceptionストリームの終わりに到達したことを意味します。デバッガーで何を見ていると思うかわかりませんが、ストリームには読み取るオブジェクトがありません。catch(EOFException exc)動作します。この時点で、ストリームを閉じて読み取りループを終了する必要があります。available()ストリーム テストの終わりとして誤用しないでください。それは目的ではありません。

于 2013-04-13T04:40:49.240 に答える