java - 为什么我会收到 NullPointerException?

标签 java android face-recognition

这是我的面部检测 Android 应用程序的代码。我收到错误,但不知道为什么

private int count;
    private Bitmap[] thumbnails;
    private Bitmap[] arcok;
    private boolean[] thumbnailsselection;
    private String[] arrPath;
    private ImageAdapter imageAdapter;
    private int faceCount;

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

        final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID};
        final String orderBy = MediaStore.Images.Media._ID;
        Cursor imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);

        int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
        this.count = imagecursor.getCount();
        this.thumbnails = new Bitmap[this.count];
        this.arrPath = new String[this.count];
        this.thumbnailsselection = new boolean[this.count];



        for (int i = 0; i < thumbnails.length - 1; ++i) {
            imagecursor.moveToPosition(i);
            int id = imagecursor.getInt(image_column_index);

            thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(),
                    id,
                    MediaStore.Images.Thumbnails.MICRO_KIND,
                    null);

            if (hasFace(thumbnails[i]) == true) {

                for (int j = 0; j < this.count; j++) {
                    imagecursor.moveToPosition(i);

                    int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
                    thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
                            getApplicationContext().getContentResolver(),
                            id,
                            MediaStore.Images.Thumbnails.MICRO_KIND,
                            null);
                    arrPath[i] = imagecursor.getString(dataColumnIndex);
                    faceCount++;
                }
            } else
                thumbnails[i] = null;


        }
        this.arcok = new Bitmap[faceCount];
        for (int i = 0, j = 0; i < thumbnails.length; ++i) {
            if (thumbnails[i] != null) {
                arcok[j] = thumbnails[i];
                j++;
            }
        }


        GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
        imageAdapter = new ImageAdapter();
        imagegrid.setAdapter(imageAdapter);
        imagecursor.close();

        final Button selectBtn = (Button) findViewById(R.id.selectBtn);


    }

    private boolean hasFace(Bitmap inBmp) {
        Bitmap bmp = inBmp.copy(Bitmap.Config.RGB_565, true);
        FaceDetector fd = new FaceDetector(bmp.getWidth(), bmp.getHeight(), 1);
        FaceDetector.Face faces[] = new FaceDetector.Face[1];
        int numFaces = fd.findFaces(bmp, faces);
        bmp.recycle();
        return numFaces > 0;
    }

这是日志猫:

01-18 23:04:59.719  28915-28915/com.img.user.javitott E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.img.user.javitott/com.img.user.javitott.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
            at android.app.ActivityThread.access$1500(ActivityThread.java:121)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3768)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.img.user.javitott.MainActivity.hasFace(MainActivity.java:124)
            at com.img.user.javitott.MainActivity.onCreate(MainActivity.java:59)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
            at android.app.ActivityThread.access$1500(ActivityThread.java:121)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3768)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
            at dalvik.system.NativeStart.main(Native Method)

我在 hasFace 方法的第一行和第一个 for 循环的 if 语句中收到错误

最佳答案

在您的方法 hasFace 中,您从不检查以确保 inBmp 不为 NULL,因此当您尝试访问 Config 属性,将会失败。

关于java - 为什么我会收到 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015354/

相关文章:

android - 如何在 Spinner Widget 而不是 Text View 中显示自己的 View ?

python - 使用 Haarcascade 检测到的面部,如何在不同颜色的相同面部上绘制边界框

java - SAXBuilder().build(InputStream) - 这会将整个文件读入内存吗?

java - Java 中的声学回声消除

java - Swing 多个始终位于顶部的对话框在具有相同所有者时无法独立工作

android - 为一个固定位置获取不同的纬度和经度

android - 什么是短信状态代码

java - 在 javacv 中使用高像素相机时出错?

python - CV2:关闭相机连接并在不同功能中重新打开

java - 休息 HATEOAS : How to serialize nested resources (with Spring HATEOAS)?