android上svmlib的svm_train函数返回错误

android上svmlib的svm_train函数返回错误,android,libsvm,Android,Libsvm,我想使用svmlib进行分类,但是,当我使用svm_train时,android返回和错误:由:java.lang.NullPointerException引起。我不知道问题出在哪里,我认为我正确地构造了svm_prolem prob和svm_param param,如下所示。如果您有任何帮助,我们将不胜感激,并很抱歉通过发布此长代码来打扰您。提前谢谢 // Readin the image training set ArrayList<Photo> photoList2

我想使用svmlib进行分类,但是,当我使用svm_train时,android返回和错误:由:java.lang.NullPointerException引起。我不知道问题出在哪里,我认为我正确地构造了svm_prolem prob和svm_param param,如下所示。如果您有任何帮助,我们将不胜感激,并很抱歉通过发布此长代码来打扰您。提前谢谢

 // Readin the image training set
    ArrayList<Photo> photoList2 = new ArrayList<Photo>();
    ArrayList<ArrayList<Photo>> BAse = new ArrayList<ArrayList<Photo>>();
    int j=0;
    for(  j=0; j<EventAnnoation.length; j++){
photoList2 = new ArrayList<Photo>();
photoList2.addAll(myBaseLearning.getAllPhotoinCluster(EventAnnoation[j]));    //get photos from a specific cluster

BAse.add(photoList2);

}

 // Get the number of all images of training set
 int size = 0;
 for( j=0; j<BAse.size(); j++){
size+= BAse.get(j).size();}

 // build a problem

    svm_problem prob = new svm_problem();
    prob.l =size;
    prob.y = new double[prob.l];
    prob.x = new svm_node[prob.l][144];

    // Fill the problem 
 for(int i=0; i<BAse.size(); i++){
         photoList2 = new ArrayList<Photo>();
         photoList2.addAll(BAse.get(i));

        for(int t=0; t<photoList2.size(); t++){

            Photo p= photoList2.get(t);// get the image

            prob.y[i] = i;// La classe
            double[] data= getDataInDouble(p.getCEDD()); // convert data/feature from string to double

            int count =0;
            for ( j=0;j<data.length;j++) 
            {       
                prob.x[i][j] = new svm_node();
                prob.x[i][j].index =count;
                prob.x[i][j].value = data[j]; 
                count++;
            }// End data for each image
        }// fin de la lecture de toutes les images de la liste
 }// fin de la lecture de toutes les images de la base



    //********************************************************
    svm_parameter param = new svm_parameter();
   // default values
   param.svm_type = svm_parameter.C_SVC;
   param.kernel_type = svm_parameter.RBF;
   param.degree = 3;
   param.gamma = 0.5;   // 1/num_features
   param.coef0 = 0;
   param.nu = 0.5;
   param.cache_size = 100;
   param.C = 1;
   param.eps = 1e-3;
   param.p = 0.1;
    param.shrinking = 1;
   param.probability = 0;
   param.nr_weight = 0;
   param.weight_label = new int[5];
   param.weight = new double[5];
   param.weight[0] = 0;
   param.weight[1] = 0;
   param.weight[2] = 0;
   param.weight[3] = 0;
   param.weight[4] = 0;

   ph+=svm.svm_check_parameter(prob, param); 
   svm.svm_train(prob, param);

  text.setText(ph);
完整消息错误为:

06-11 20:49:38.348: E/AndroidRuntime(5385): FATAL EXCEPTION: main
06-11 20:49:38.348: E/AndroidRuntime(5385): java.lang.RuntimeException: Unable to   start activity ComponentInfo{com.example.svmlibandr/com.example.svmlibandr.Svmliib}: java.lang.NullPointerException
06-11 20:49:38.348: E/AndroidRuntime(5385):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2071)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at android.app.ActivityThread.access$600(ActivityThread.java:138)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at java.lang.reflect.Method.invoke(Method.java:511)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at dalvik.system.NativeStart.main(Native Method)
06-11 20:49:38.348: E/AndroidRuntime(5385): Caused by: java.lang.NullPointerException
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.Kernel.dot(svm.java:212)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.Kernel.<init>(svm.java:198)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.SVC_Q.<init>(svm.java:1155)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at libsvm.svm.solve_c_svc(svm.java:1332)
06-11 20:49:38.348: E/AndroidRuntime(5385):     at  libsvm.svm.svm_train_one(svm.java:1509)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at libsvm.svm.svm_train(svm.java:2046)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at com.example.svmlibandr.Svmliib.onCreate(Svmliib.java:245)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at android.app.Activity.performCreate(Activity.java:5008)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
 06-11 20:49:38.348: E/AndroidRuntime(5385):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035)

我发现错误是关于问题的维度。我让我的代码作为在android上为像我这样的Bignner使用svmlib的例子。我希望它对其他人有用

解决办法是:

int count=0;
    for(j=0; j<BAse.size(); j++){


         photoList2 = new ArrayList<Photo>();
         photoList2.addAll(BAse.get(j));

        for(int t=0; t<photoList2.size(); t++){
                Photo p= new Photo();
             p= photoList2.get(t);
             prob.y[count]= j;
             double[] data= new double[144];
              data= getDataInDouble(p.getCEDD());

             for(int i=0; i<data.length;i++){
                 prob.x[count][i]= new svm_node();
                 prob.x[count][i].index=i;
                 prob.x[count][i].value=data[i];
             }
                count++;
        }
    }

请提供完整的错误登录编辑原始消息,希望它更清楚。提前谢谢