簡體   English   中英

從資產讀取對象時發生ClassNotFoundException(android)

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

我有一個“數據”類,它的定義如下:

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;
        } }

我在NETBEANS中為Windows中的Java創建了.brd文件(我自己的文件類型):

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

其中list是Data的ArrayList。

我想從我的Android應用程序讀取此文件。 所以我在包中創建了完全相同的類,並將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();

但是我將數據作為空白ArrayList獲得。 除此之外,我還得到以下異常:

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):位於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):在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):在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)

我究竟做錯了什么 ? 我正在將Eclipse IDE用於Android應用程序。

我知道您在另一個項目中創建了Data類。 您必須將該類打包在一個jar中,並將其添加到android項目的buildpath中。

如果僅在Android項目中重新創建Data類,則該類與ClassLoader不會是同一類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM