在Android中调用ObjectInputStream.readobject期间发生ClassNotFoundException

时间:2013-08-23 14:46:13

标签: java android classnotfoundexception

我想从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();
        }
    }
}

3 个答案:

答案 0 :(得分:0)

  

ClassNotFoundException的

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

答案 1 :(得分:0)

继续阅读readObject

  

对于InputStream和for的问题,会抛出异常   不应反序列化的类。所有例外都是致命的   InputStream并使其处于不确定状态;它取决于   调用者忽略或恢复流状态。

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

希望这有帮助。

答案 2 :(得分:0)

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

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