【问题标题】:App crashes when I use jniSvmTrain使用 jniSvmTrain 时应用程序崩溃
【发布时间】:2017-07-29 05:02:47
【问题描述】:

当我运行jniSvmTrain(svmTrainOptions + dataTrainPath + modelPath); 时,应用程序崩溃了,我不知道为什么(删除此行后它运行良好)。目的是构建一个基于 AndroidLibSVM 的应用程序,在 iris 数据集上对其进行训练。我按照此处的说明将 AndroidLibSVM 集成到 Android Studio 中:https://github.com/yctung/AndroidLibSvm

我尝试在 AndroidLibSVM 上关注this tutorial

这是 IrisActivity.java 文件的代码:

package example.iris;

import android.support.v7.app.AppCompatActivity;
import android.os.Environment;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class IrisActivity extends AppCompatActivity {

    Button go;

    String appFolderPath;
    String systemPath;

    static{
        System.loadLibrary("jnilibsvm");
    }

    private native void jniSvmTrain(String cmd);
    private native void jniSvmPredict(String cmd);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_iris);

        go = (Button)findViewById(R.id.go);

        systemPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
        appFolderPath = systemPath + "libsvm/";

        // iris.train is available here : https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/iris.scale
        final String dataTrainPath = appFolderPath + "iris.train ";
        final String dataPredictPath = appFolderPath + "iris.predict ";
        final String modelPath = appFolderPath + "iris.model ";
        final String outputPath = appFolderPath + "iris.output ";

        final String svmTrainOptions = "-s 0 -t 2 -g 1 -r 0 ";

        go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // The next line conducts the app to crash, but why ?
                jniSvmTrain(svmTrainOptions + dataTrainPath + modelPath);
            }
        });
    }
}

感谢您的帮助。

【问题讨论】:

  • 错误是什么
  • jniSvmTrain(svmTrainOptions + dataTrainPath + modelPath); 行导致应用崩溃(但 APK 文件由 Android Studio 生成并安装)。删除后,应用运行良好。

标签: android libsvm


【解决方案1】:

当我运行 jniSvmTrain(svmTrainOptions + dataTrainPath + modelPath);, 应用崩溃

你应该把button放在setContentView下面

 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_iris);
 go = (Button)findViewById(R.id.go);

【讨论】:

  • 感谢您的回答。我按照你的建议做了,但应用程序仍然因为同一行而崩溃。
【解决方案2】:

感谢logcat,我发现了问题:

03-09 02:34:04.252 27921-27921/example.iris D/AndroidLibSvmNDK: NDK: jniSvmTrain cmd = -s 0 -t 2 -g 1 -r 0 /storage/emulated/0/libsvm/iris.train /storage/emulated/0/libsvm/iris.model
03-09 02:34:04.256 27921-27921/example.iris D/AndroidLibSvmNDK: NDK: can't open input file /storage/emulated/0/libsvm/iris.train

解决方案:应用程序崩溃,因为我忘记在 AndroidManifest.xml 文件中添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 以获得访问内部存储器的权限。

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2014-04-18
    • 2023-03-04
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多