0

我想从 Android 内部存储中读取对象。

以下是我的代码。我编写了一个静态函数,用于从同一类中的文件中读取对象。不知道为什么会发生这种异常。如果您能提出一些建议,真的很感激。

谢谢。

package com.crescent.programmercalculator;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import android.util.Log;
import android.content.Context;

public class CalculateConfigurations implements Serializable{

    static String configLocation="configFile";

    public short radix;

    CalculateConfigurations(){
        radix=16; 
    }

    public static CalculateConfigurations loadObjectFromFile(Context context){
        try {
            FileInputStream fis = context.openFileInput(configLocation);
            ObjectInputStream is = new ObjectInputStream(fis);
            CalculateConfigurations config = (CalculateConfigurations) is.readObject();
            is.close();
            fis.close();
            return config;
        } catch (FileNotFoundException e) {
            // first use case
            Log.v("CalculateConfigurations", "first init for configuration file");

            return new CalculateConfigurations();
        } catch (IOException e) {
            e.printStackTrace();
            Log.e("CalculateConfigurations", "Fatal error, configuration file may be broken");

            return new CalculateConfigurations();
        } 
        catch (ClassNotFoundException e) {
            e.printStackTrace();
            Log.e("CalculateConfigurations", "Fatal error, unknown");

            return new CalculateConfigurations();
        }
    }
}
4

3 回答 3

0

ClassNotFoundException

在大多数情况下,这是您的 xml 文件中的一些混淆。如果您同时发布堆栈跟踪和正确的 xml 文件,则很容易修复它!

于 2013-08-23T14:48:53.660 回答
0

我今天遇到同样的问题。我不知道序列化/反序列化是如何完成的,但我注意到这是一个非常不稳定的过程。

如果您序列化一些对象并放入内存,则无法轻松更改数据类型/类名。如果它抛出这样的类未找到异常,请从设备中删除应用程序并重新安装。我希望,它可以帮助一些开发人员:)

于 2014-08-14T12:09:51.237 回答
0

阅读readObject

对于 InputStream 的问题和不应反序列化的类会引发异常。所有异常对 InputStream 来说都是致命的,并使其处于不确定状态;由调用者忽略或恢复流状态。

由于您正在尝试读取 android 内部库,因此无法将其转换为您的自定义类。因此,ClassNotFoundException。

希望这可以帮助。

于 2013-08-23T15:02:08.823 回答