简体   繁体   English

从资产读取对象时发生ClassNotFoundException(android)

[英]ClassNotFoundException when reading object from assets(android)

I have a class 'Data', which is defined like this : 我有一个“数据”类,它的定义如下:

public class Data implements Serializable{


    /**
     * 
     */
    private static final long serialVersionUID = 112358L;
    public int pagenumber;
    public int chapternumber;
    public int marks;


  public  Data(int pn, int c, int m) {

       chapternumber=c;
       pagenumber=pn;
       marks=m;
        } }

I have made a .brd file (my own file type) in NETBEANS for java in windows like this : 我在NETBEANS中为Windows中的Java创建了.brd文件(我自己的文件类型):

        fout=new FileOutputStream("Data.brd");
        oos=new ObjectOutputStream(fout);
        oos.writeObject(list);

Where list is an ArrayList of Data . 其中list是Data的ArrayList。

I want to read this file from my android app. 我想从我的Android应用程序读取此文件。 so I made the exact same class inside my package and saved the Data.brd in my assets folder. 所以我在包中创建了完全相同的类,并将Data.brd保存在资产文件夹中。

ArrayList<Data> data = null; //object to be deserialized
InputStream is = null;
ObjectInputStream ois=null;
AssetManager assets = getAssets();
    is = assets.open("Data.brd");
        ois = new ObjectInputStream(is);
    data = (ArrayList<Data>) ois.readObject();

But I get Data as a blank ArrayList. 但是我将数据作为空白ArrayList获得。 Aside of that, I get the following Exceptions: 除此之外,我还得到以下异常:

06-13 17:29:12.320: W/System.err(2180): java.lang.ClassNotFoundException: software.Data 06-13 17:29:12.320: W/System.err(2180): at java.lang.Class.classForName(Native Method) 06-13 17:29:12.324: W/System.err(2180): at java.lang.Class.forName(Class.java:217) 06-13 17:29:12.324: W/System.err(2180): at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2301) 06-13 17:29:12.324: W/System.err(2180): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1660) 06-13 17:29:12.324: W/System.err(2180): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683) 06-13 17:29:12.324: W/System.err(2180): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1803) 06-13 17:29:12.328: W/System.err(2180): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787) 06-13 17:29:12.328: W/System.err(2180): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003) 06-13 17:29:12.328: W/System.err(2180): at java.io.ObjectInputS 06-13 17:29:12.320:W / System.err(2180):java.lang.ClassNotFoundException:software.Data 06-13 17:29:12.320:W / System.err(2180):在java.lang。 Class.classForName(本机方法)06-13 17:29:12.324:W / System.err(2180):at java.lang.Class.forName(Class.java:217)06-13 17:29:12.324:W /System.err(2180):在java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2301)06-13 17:29:12.324:W / System.err(2180):在java.io.ObjectInputStream.readNewClassDesc( ObjectInputStream.java:1660)06-13 17:29:12.324:W / System.err(2180):at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)06-13 17:29:12.324:W / System.err(2180):位于java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1803)06-13 17:29:12.328:W / System.err(2180):位于java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream .java:787)06-13 17:29:12.328:W / System.err(2180):at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)06-13 17:29:12.328:W / System .err(2180):位于java.io.ObjectInputS tream.readObject(ObjectInputStream.java:1960) 06-13 17:29:12.328: W/System.err(2180): at java.util.ArrayList.readObject(ArrayList.java:657) 06-13 17:29:12.328: W/System.err(2180): at java.lang.reflect.Method.invokeNative(Native Method) 06-13 17:29:12.328: W/System.err(2180): at java.lang.reflect.Method.invoke(Method.java:511) 06-13 17:29:12.328: W/System.err(2180): at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1354) 06-13 17:29:12.328: W/System.err(2180): at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1266) 06-13 17:29:12.332: W/System.err(2180): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1855) 06-13 17:29:12.332: W/System.err(2180): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787) 06-13 17:29:12.332: W/System.err(2180): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003) 06-13 17:29:12.332: W/System.err(2180): at java.io.ObjectInputStream.readObject(ObjectInputStream.jav tream.readObject(ObjectInputStream.java:1960)06-13 17:29:12.328:W / System.err(2180):at java.util.ArrayList.readObject(ArrayList.java:657)06-13 17:29: 12.328:W / System.err(2180):位于java.lang.reflect.Method.invokeNative(本机方法)06-13 17:29:12.328:W / System.err(2180):位于java.lang.reflect。 Method.invoke(Method.java:511)06-13 17:29:12.328:W / System.err(2180):at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1354)06-13 17:29: 12.328:W / System.err(2180):at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1266)06-13 17:29:12.332:W / System.err(2180):at java.io.ObjectInputStream .readNewObject(ObjectInputStream.java:1855)06-13 17:29:12.332:W / System.err(2180):at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)06-13 17:29:12.332 :W / System.err(2180):位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)06-13 17:29:12.332:W / System.err(2180):位于java.io.ObjectInputStream。 readObject(ObjectInputStream.jav a:1960) 06-13 17:29:12.332: W/System.err(2180): at com.mainpackage.MainActivity.onCreate(MainActivity.java:84) 06-13 17:29:12.332: W/System.err(2180): at android.app.Activity.performCreate(Activity.java:5008) 06-13 17:29:12.336: W/System.err(2180): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 06-13 17:29:12.336: W/System.err(2180): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 06-13 17:29:12.336: W/System.err(2180): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 06-13 17:29:12.336: W/System.err(2180): at android.app.ActivityThread.access$600(ActivityThread.java:130) 06-13 17:29:12.336: W/System.err(2180): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 06-13 17:29:12.336: W/System.err(2180): at android.os.Handler.dispatchMessage(Handler.java:99) 06-13 17:29:12.336: W/System.err(2180): at android.os.Looper.loop(Looper.java:137) 06-13 17:29:12.336: W/System.err(2180): a a:1960)06-13 17:29:12.332:W / System.err(2180):at com.mainpackage.MainActivity.onCreate(MainActivity.java:84)06-13 17:29:12.332:W / System。 err(2180):在android.app.Activity.performCreate(Activity.java:5008)06-13 17:29:12.336:W / System.err(2180):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java :1079)06-13 17:29:12.336:W / System.err(2180):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)06-13 17:29:12.336:W / System.err (2180):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)06-13 17:29:12.336:W / System.err(2180):位于android.app.ActivityThread.access $ 600(ActivityThread.java :130)06-13 17:29:12.336:W / System.err(2180):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1195)06-13 17:29:12.336:W / System .err(2180):位于android.os.Handler.dispatchMessage(Handler.java:99)06-13 17:29:12.336:W / System.err(2180):位于android.os.Looper.loop(Looper。 java:137)06-13 17:29:12.336:W / System.err(2180):a t android.app.ActivityThread.main(ActivityThread.java:4745) 06-13 17:29:12.336: W/System.err(2180): at java.lang.reflect.Method.invokeNative(Native Method) 06-13 17:29:12.340: W/System.err(2180): at java.lang.reflect.Method.invoke(Method.java:511) 06-13 17:29:12.340: W/System.err(2180): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 06-13 17:29:12.340: W/System.err(2180): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 06-13 17:29:12.340: W/System.err(2180): at dalvik.system.NativeStart.main(Native Method) 06-13 17:29:12.340: W/System.err(2180): Caused by: java.lang.NoClassDefFoundError: software/Data 06-13 17:29:12.344: W/System.err(2180): ... 33 more 06-13 17:29:12.344: W/System.err(2180): Caused by: java.lang.ClassNotFoundException: software.Data 06-13 17:29:12.344: W/System.err(2180): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 06-13 17:29:12.344: W/System.err(2180): at java.lang.ClassLoader.loadClass t android.app.ActivityThread.main(ActivityThread.java:4745)06-13 17:29:12.336:W / System.err(2180):at java.lang.reflect.Method.invokeNative(Native Method)06-13 17:29:12.340:W / System.err(2180):at java.lang.reflect.Method.invoke(Method.java:511)06-13 17:29:12.340:W / System.err(2180):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)06-13 17:29:12.340:W / System.err(2180):在com.android.internal.os.ZygoteInit。 main(ZygoteInit.java:553)06-13 17:29:12.340:W / System.err(2180):at dalvik.system.NativeStart.main(Native Method)06-13 17:29:12.340:W / System .err(2180):由以下原因引起:java.lang.NoClassDefFoundError:software / Data 06-13 17:29:12.344:W / System.err(2180):... 33 more 06-13 17:29:12.344: W / System.err(2180):由以下原因引起:java.lang.ClassNotFoundException:software.Data 06-13 17:29:12.344:W / System.err(2180):在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader。 java:61)06-13 17:29:12.344:W / System.err(2180):位于java.lang.ClassLoader.loadClass (ClassLoader.java:501) 06-13 17:29:12.344: W/System.err(2180): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) (ClassLoader.java:501)06-13 17:29:12.344:W / System.err(2180):at java.lang.ClassLoader.loadClass(ClassLoader.java:461)

what am I doing wrong ? 我究竟做错了什么 ? I am using Eclipse IDE for the android app. 我正在将Eclipse IDE用于Android应用程序。

I get that you created the class Data in a different project. 我知道您在另一个项目中创建了Data类。 You'll have to pack that class in a jar and add it to the buildpath of your android project. 您必须将该类打包在一个jar中,并将其添加到android项目的buildpath中。

If you simply recreate the Data class in your android project it will not be the same class to the ClassLoader. 如果仅在Android项目中重新创建Data类,则该类与ClassLoader不会是同一类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM