Что не так с моей загрузкой сериализации Android с диска? - PullRequest
0 голосов
/ 16 ноября 2011

Я уже давно пытаюсь выяснить эту сериализованную хеш-таблицу и сохранить / загрузить ее на диск. Когда я вызывал метод saveDataToDisk, я передаю ему созданный мной объект хеш-таблицы.

Сохраняется и, кажется, работает нормально, а затем, когда я пытаюсь загрузить его обратно, он переходит к блоку catch, когда читает это

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/dev/null"));.

Вывод ошибки ниже, любая помощь будет принята с благодарностью. Заранее спасибо ребята.

public boolean saveDataToDisk(Object hashObject)
{
    FileOutputStream fos;
    try
    {
        fos = new FileOutputStream("/dev/null");
        ObjectOutputStream oos;
        oos = new ObjectOutputStream(fos);
        oos.writeObject(hashObject);
        oos.close();
    }
    catch (FileNotFoundException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return true;
}

public static Hashtable<String, Object> loadDataFromDisk()
{
    Hashtable<String, Object> newHash = null;
    FileInputStream fis;
    try
    {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/dev/null"));
        newHash = (Hashtable<String, Object>) ois.readObject();
        System.out.println("newHash");
    }
    catch (ClassNotFoundException cnfe)
    {
        Log.e("deserializeObject", "class not found error", cnfe);

        return null;
    }
    catch (IOException ioe)
    {
        Log.e("deserializeObject", "io error", ioe);

        return null;
    }

    if (newHash == null)
        newHash = new Hashtable<String, Object>();
    return newHash;
}

Это ошибка:

11-15 23:29:55.282: ERROR/deserializeObject(895): io error
11-15 23:29:55.282: ERROR/deserializeObject(895): java.io.EOFException
11-15 23:29:55.282: ERROR/deserializeObject(895):     at java.io.DataInputStream.readShort(DataInputStream.java:376)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2365)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:433)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at B.Duy.Le.PersistentHandler.loadDataFromDisk(PersistentHandler.java:125)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at B.Duy.Le.PersistentTest$1.onClick(PersistentTest.java:85)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at android.view.View.performClick(View.java:2485)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at android.view.View$PerformClick.run(View.java:9080)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at android.os.Handler.handleCallback(Handler.java:587)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at android.os.Looper.loop(Looper.java:123)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at android.app.ActivityThread.main(ActivityThread.java:3683)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at java.lang.reflect.Method.invokeNative(Native Method)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at java.lang.reflect.Method.invoke(Method.java:507)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-15 23:29:55.282: ERROR/deserializeObject(895):     at dalvik.system.NativeStart.main(Native Method)

1 Ответ

0 голосов
/ 16 ноября 2011

Я использовал подобный код .... может быть, это может вам помочь. И он работает правильно

Для сохранения: Где requestDataMap является HashMap

File directoryName = new File(Environment.getExternalStorageDirectory(),"/folder1/subfolder");
    directoryName.mkdirs();
    File outputFile = new File(directoryName, filename);
    FileOutputStream fos;

    try {

        fos = new FileOutputStream(outputFile);

        ObjectOutputStream out = new ObjectOutputStream(fos);

        out.writeObject(requestDataMap);
        fos.flush();
        fos.close();

Для загрузки

HashMap<String, Object> requestDataMap=new HashMap<String, Object>();
    File directoryName = new File(Environment.getExternalStorageDirectory(),"/folder1/subfolder1");
    directoryName.mkdirs();
    File outputFile = new File(directoryName,fileName);
    FileInputStream fis;
    try {
        fis = new FileInputStream(outputFile);
            ObjectInputStream ois = new ObjectInputStream(fis);
            requestDataMap = (HashMap<String, Object>) ois.readObject();
            ois.close();
    }
...