Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-读取文件时获取空指针_Android_Nullpointerexception - Fatal编程技术网

Android-读取文件时获取空指针

Android-读取文件时获取空指针,android,nullpointerexception,Android,Nullpointerexception,我已经找了好几个星期了,为什么我得到了一个空指针,但还没有找到原因。下面是代码部分,我在其中读取文件,然后在ListView中列出它们 喷溅活动: public static void setFolderPath() { String dest; try { dest = pref.getString(FOLDER_DEST_SETTING_KEY, FOLDER_INTERNAL_DEST); } catch (Exception e) {

我已经找了好几个星期了,为什么我得到了一个空指针,但还没有找到原因。下面是代码部分,我在其中读取文件,然后在ListView中列出它们

喷溅活动:

public static void setFolderPath() {
    String dest;
    try {
        dest = pref.getString(FOLDER_DEST_SETTING_KEY, FOLDER_INTERNAL_DEST);
    } catch (Exception e) {
        dest = FOLDER_INTERNAL_DEST;
    }
    if (dest.equals(FOLDER_EXTERNAL_DEST) && hasExternal) {
        folderPath = externalPath;
    } else {
        folderPath = internalPath;
        SharedPreferences.Editor editor = pref.edit();
        editor.putString(FOLDER_DEST_SETTING_KEY, FOLDER_INTERNAL_DEST);
        editor.apply();
    }
}

public static String getFolderPath() {
    setFolderPath();
    return folderPath == null ? internalPath : folderPath;
}
主要活动:

/**
 * Initialisierung
 */
private void init() {
    initFiles();

    if (listView != null) {
        listView.setAdapter(new CustomSingleSelectAdapter(context, files));
        listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                itemClicked(position);
            }
        });
    } else {
        Toast.makeText(context, R.string.init_fehler, Toast.LENGTH_SHORT).show();
        finish();
    }
    ESortBy sort = ESortBy.getSorting(pref.getInt(Constants.SORT_BY_KEY, ESortBy.NOT_SORTED.ordinal()));
    NotizFile.setSort(sort);
    Collections.sort(files);
}

private void initFiles() {
    files = Util.getAllNotices(context);
}
是否因为列表(文件)为空?但是我用方法“getAllNotices()”初始化它。那为什么有时候是空的呢

额外资料:
在我的手机上,它工作得很好,但在我朋友的手机上,它有时会抛出一个异常(Galaxy A3)

我不确定这是否回答了你的问题。但我注意到,如果文件夹存在并且文件夹无法生成目录,即。
folder.exists()&&!folder.mkdirs()
条件未处理。原因可能是您的应用程序没有足够的权限读取该目录

您当前的逻辑是-如果
文件夹不存在
,则选中
文件夹无法创建目录
。这意味着您假设如果
文件夹确实存在
,那么
我可以创建目录
,在某些情况下可能无法工作

如果抽象路径名不表示目录,或者如果发生I/O错误,则方法
File.ListFiles()
可以返回null,如果存在安全管理器并且其
SecurityManager.checkRead(String)
方法拒绝对目录的读取访问,则可以抛出
SecurityException


如果有帮助,请告诉我。

问题中的代码与堆栈跟踪不匹配。堆栈跟踪显示从
initFiles()
调用
Collections.sort()
。你的代码没有那个调用。Sry,我忘记重做了。我编辑我的代码仍然缺少代码。这不是
initFiles
的代码。它仍然与堆栈跟踪不匹配。堆栈跟踪显示从
initFiles()
调用
Collections.sort()
。你的
initFiles()
方法没有调用
sort()
。我在initFiles()的末尾调用Collection.sort(),并在NotizFile中实现类似的接口,但是为什么它在一些手机上工作,而在一些手机上不工作呢?基于操作系统版本和风格(三星、LG等都有自己的android操作系统版本),这种行为可能会有所不同。您需要添加更多的调试打印,并尝试使用catch块来实际捕获问题。
public static List<NotizFile> getAllNotices(Context context) {
    String folderPath = SplashActivity.getFolderPath();

    File folder = new File(folderPath);
    if (!folder.exists()) {
        if (!folder.mkdirs()) {
            Toast.makeText(context, R.string.ordner_erstellen_fehler, Toast.LENGTH_SHORT).show();
            return new ArrayList<>();
        }
    }

    List<NotizFile> list = new ArrayList<>();
    for (File file : folder.listFiles()) {
        list.add(new NotizFile(file.getAbsolutePath(), false));
    }

    return list;
}
public class NotizFile implements Serializable, Comparable<NotizFile> {
    @Override
    public int compareTo(@NonNull NotizFile otherFile) {
        switch (sortBy) {
          case NAME_ASC:
            return compareName(sortBy, this, otherFile);
          case NAME_DESC:
            return compareName(sortBy, this, otherFile);
          case DATE_ASC:
            return compareDate(sortBy, this, otherFile);
          case DATE_DESC:
            return compareDate(sortBy, this, otherFile);
          case WICHTIG_ASC:
            return compareImportance(sortBy, this, otherFile);
          case WICHTIG_DESC:
            return compareImportance(sortBy, this, otherFile);
          default:
            return 0;
        }
    }
}
Caused by: java.lang.NullPointerException: 
  at java.util.Collections.sort(Collections.java:1869)
  at daniel.com.notizapp.core.MainActivity.initFiles(MainActivity.java:117)
  at daniel.com.notizapp.core.MainActivity.init(MainActivity.java:75)
  at daniel.com.notizapp.core.MainActivity.onCreate(MainActivity.java:63)
  at android.app.Activity.performCreate(Activity.java:6904)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)