繁体   English   中英

java.lang.NullPointerException:尝试获取与“无法读取空数组”相关的空数组的长度

[英]java.lang.NullPointerException: Attempt to get length of null array related with 'can't read null array'

我从模拟器收到一条“不幸的是‘应用程序名称’已停止”消息。 我认为脚本无法找到文件夹或无法读取文件名。 附上res文件夹的照片。 我尝试了“res/drawable”“/res/drawable/”等,但得到了相同的结果。 我在清单文件中使用了以下权限,但无济于事。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我检查了所有与 stackoverflaw 相关的链接,但无法解决我的问题。

package chessactivepgnviewer.com.pgnviewer;

import java.io.File;
import java.util.ArrayList;

/**
 * Created by serhat on 04.11.2015.
 */
public class klasor {
    private String drawable;
    private ArrayList<File> files;

    public void listf(String drawable, ArrayList<File> files) {
        File directory;
        directory = new File(drawable);

        // get all the files from a directory
        File[] fList = directory.listFiles();
        for (File file : fList) {
            if (file.isFile()) {
                files.add(file);
            } else if (file.isDirectory()) {
                listf(file.getAbsolutePath(), files);
            }
        }
    }
}

我的主要活动文件请特别注意我为文件提供的路径

package chessactivepgnviewer.com.pgnviewer;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.satranc_tahtasi);

        File folder = new File("D:/Android_Dosyalar/Proje/PGNViewer/app/src/main/res/drawable");
        File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                System.out.println("File " + listOfFiles[i].getName());
            } else if (listOfFiles[i].isDirectory()) {
                System.out.println("Directory " + listOfFiles[i].getName());
            }
        }
    }
}

这是日志猫

11-05 22:29:41.577 2215-2215/? I/art: Not late-enabling -Xcheck:jni (already on)
11-05 22:29:41.678 2215-2215/chessactivepgnviewer.com.pgnviewer D/AndroidRuntime: Shutting down VM
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime: FATAL EXCEPTION: main
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime: Process: chessactivepgnviewer.com.pgnviewer, PID: 2215
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{chessactivepgnviewer.com.pgnviewer/chessactivepgnviewer.com.pgnviewer.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:151)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5257)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:  Caused by: java.lang.NullPointerException: Attempt to get length of null array
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at chessactivepgnviewer.com.pgnviewer.MainActivity.onCreate(MainActivity.java:20)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5990)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
11-05 22:29:41.679 2215-2215/chessactivepgnviewer.com.pgnviewer

你应该修复你试图访问的路径,改变这个

File folder = new File("D:/Android_Dosyalar/Proje/PGNViewer/app/src/main/res/drawable");

到设备中的路径,例如:

File folder = new File("/data/chessactivepgnviewer.com.pgnviewer/");

您的问题出在以下几行:

File folder = new File("D:/Android_Dosyalar/Proje/PGNViewer/app/src/main/res/drawable");
File[] listOfFiles = folder.listFiles();

作为listOfFiles,它似乎是空的。

如果您想获得所有可绘制对象的列表,您可能想尝试以下操作:

Field[] drawables = chessactivepgnviewer.com.pgnviewer.R.drawable.class.getFields();

for (Field f : drawables) {
    try {
         System.out.println("R.drawable." + f.getName());
    } catch (Exception e) {
         e.printStackTrace();
    }
}

该文件夹不存在。 所以,folder.listFiles() 返回 null。

如果您将图片放在 apk 中,请使用资产文件夹。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM