Android-读取文件时获取空指针
我已经找了好几个星期了,为什么我得到了一个空指针,但还没有找到原因。下面是代码部分,我在其中读取文件,然后在ListView中列出它们 喷溅活动: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) {
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)