Java android中的Weka模型读取错误

Java android中的Weka模型读取错误,java,android,android-studio,machine-learning,weka,Java,Android,Android Studio,Machine Learning,Weka,我在机器中创建了我的weka模型,并将其导入到android项目中。当我尝试创建分类器时,当我尝试反序列化我创建的模型时,它会给出一个错误“exception.java.io.StreamCorruptedException”。该代码在机器中运行良好 这是我的密码 InputStream fis = null; fis = new InputStream("/modle.model"); InputStream is = fis; Class

我在机器中创建了我的weka模型,并将其导入到android项目中。当我尝试创建分类器时,当我尝试反序列化我创建的模型时,它会给出一个错误“exception.java.io.StreamCorruptedException”。该代码在机器中运行良好

这是我的密码

InputStream fis = null;

        fis = new InputStream("/modle.model");

        InputStream is = fis;

        Classifier cls = null;

       //here im getting the error when trying to read the Classifier
            cls = (Classifier) SerializationHelper.read(is);

        FileInputStream datais = null;

            datais = new FileInputStream("/storage/emulated/0/window.arff");


        InputStream dataIns = datais;
        DataSource source = new DataSource(dataIns);
        Instances data = null;
        try {
            data = source.getDataSet();
        } catch (Exception e) {
            e.printStackTrace();
        }
        data.setClassIndex(data.numAttributes() - 1);

        Instance in = new Instance(13);
        in.setDataset(data);
        in.setValue(0, testWekaModle1[0]);
        in.setValue(1, testWekaModle1[1]);
        in.setValue(2, testWekaModle1[2]);
        in.setValue(3, testWekaModle1[3]);
        in.setValue(4, testWekaModle1[4]);
        in.setValue(5, testWekaModle1[5]);
        in.setValue(6, testWekaModle1[6]);
        in.setValue(7, testWekaModle1[7]);
        in.setValue(8, testWekaModle1[8]);
        in.setValue(9, testWekaModle1[9]);
        in.setValue(10, testWekaModle1[10]);
        in.setValue(11, testWekaModle1[11]);

        double value = 0;

            value = cls.classifyInstance(in);

        in.setClassValue(value);
这是完整的堆栈跟踪

java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2109)
java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
weka.core.SerializationHelper.read(SerializationHelper.java:288)
info.androidhive.sleepApp.model.ControllerWeka.wekaModle(ControllerWeka.java:81)
info.androidhive.sleepApp.activity.HomeFragment.extract(HomeFragment.java:278)
info.androidhive.sleepApp.activity.HomeFragment.stop(HomeFragment.java:146)
"info.androidhive.sleepApp.activity.HomeFragment$2.onClick(HomeFragment.java:107)"
android.view.View.performClick(View.java:4475)"
android.view.View$PerformClick.run(View.java:18786)"
android.os.Handler.handleCallback(Handler.java:730)"
dalvik.system.NativeStart.main(Native Method)"
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)"
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)"
java.lang.reflect.Method.invoke(Method.java:525)"
java.lang.reflect.Method.invokeNative(Native Method)"
android.app.ActivityThread.main(ActivityThread.java:5419)"
android.os.Looper.loop(Looper.java:137)"
android.os.Handler.dispatchMessage(Handler.java:92)"
java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2109)
ObjectInputStream.(ObjectInputStream.java:372)
read(SerializationHelper.java:288)
info.androidhive.sleepApp.model.ControllerWeka.wekaModle(ControllerWeka.java:81)
info.androidhive.sleepApp.activity.HomeFragment.extract(HomeFragment.java:278)
info.androidhive.sleepApp.activity.HomeFragment.stop(HomeFragment.java:146)
“info.androidhive.sleepApp.activity.HomeFragment$2.onClick(HomeFragment.java:107)”
android.view.view.performClick(view.java:4475)”
android.view.view$PerformClick.run(view.java:18786)”
android.os.Handler.handleCallback(Handler.java:730)”
dalvik.system.NativeStart.main(本机方法)”
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)”
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)”
java.lang.reflect.Method.invoke(Method.java:525)”
java.lang.reflect.Method.Invokenactive(本机方法)”
android.app.ActivityThread.main(ActivityThread.java:5419)”
android.os.Looper.loop(Looper.java:137)”
android.os.Handler.dispatchMessage(Handler.java:92)”

请帮助我解决这个问题。

这已经解决,该模型是在不同的环境(PC)中创建的,并尝试在android环境中反序列化,由于两种类型的JDK根本不相同而导致错误。

请确保两个weka.jar都有相同的版本。 不要使用Weka的GUI版本来保存模型,因为Android运行时不包含Weka使用的GUI相关软件包


通过桌面编程构建和保存模型,并通过Android反序列化,这将很好。

问题已经解决。那么,是否可以直接从Weka GUI使用.model文件?或者我们必须在Android上对其进行培训?