Java &引用;执行doInBackground()时出错;LRX210更新后(Nexus 5)
我只是想知道是否还有其他人有这个问题。 我有两个Nexus5,一个运行5.0LPX13D(开发预览版),另一个运行5.0LRX210(官方版本)。 在我的应用程序中,我从AsyncTasks doInBackground()方法调用了一个方法call getFiles()。 在运行LPX13D的手机上,该功能运行良好,应用程序运行完美。 但是,在运行LRX210的手机上,应用程序在“File[]fileList=directory.listFiles();”行崩溃,出现错误Java &引用;执行doInBackground()时出错;LRX210更新后(Nexus 5),java,android,runtime-error,android-5.0-lollipop,Java,Android,Runtime Error,Android 5.0 Lollipop,我只是想知道是否还有其他人有这个问题。 我有两个Nexus5,一个运行5.0LPX13D(开发预览版),另一个运行5.0LRX210(官方版本)。 在我的应用程序中,我从AsyncTasks doInBackground()方法调用了一个方法call getFiles()。 在运行LPX13D的手机上,该功能运行良好,应用程序运行完美。 但是,在运行LRX210的手机上,应用程序在“File[]fileList=directory.listFiles();”行崩溃,出现错误java.lang.R
java.lang.RuntimeException:执行doInBackground()时出错。
这只发生在运行LRX210的手机上。从我看到的情况来看,该方法没有访问UI线程,因此应该可以正常工作。
如果其他任何人有问题,并已找到解决方案,任何帮助将不胜感激
异步任务的完整代码如下所示
提前谢谢
科里:)
下一行中的
文件列表
被计算为null
:
File[]fileList=directory.listFiles();
如果我们在Javadoc中检查(请参见:),我们可以看到:
如果此抽象路径名不表示目录,则此方法返回null
因此,我要做的第一件事是调试应用程序并查找以下行:
Environment.getExternalStorageDirectory()+File.separator+Constants.DIRECTORY;
及
File directory=新文件(directoryName);
File[]fileList=directory.listFiles();
如果路径名正确,则可能有其他原因导致未创建对文件的引用,例如:
返回主目录 外部存储目录。此目录当前可能不可用 如果用户已安装,并且已从中删除,则可以访问 设备或其他一些问题已经发生。你可以确定它的 当前状态为Environment.getExternalStorageDirectory()
getExternalStorageState()
- 在具有多个用户的设备上(如
所述),每个用户 用户有自己的独立外部存储器。申请只有 为正在运行的用户访问外部存储。在里面 具有多个“外部”存储目录的设备,此目录 表示用户将交互的“主”外部存储 具有可以通过访问辅助存储UserManager
- 最后,写入此路径需要
权限,并且在读访问中启动需要WRITE\u EXTERNAL\u存储器
权限,如果 您拥有写入权限读取外部存储
有关更多信息,请参阅:您可以发布完整的日志吗?我现在将编辑我的评论。Corey:)上面写的是FileListFragment.java:124上的NPE!
文件[]fileList=directory.listFiles()中的目录可能为空为什么?嘿,你是对的。由于某些原因,文件列表为空。我去调试一下,看看能找到什么。奇怪的是,这种情况只发生在较新的android版本上。谢谢你的帮助,科里:)
public class UpdateDataSet extends AsyncTask<List, String, List> {
@Override
protected List doInBackground(List... params) {
getFiles(Environment.getExternalStorageDirectory() + File.separator + Constants.DIRECTORY);
return null;
}
@Override
protected void onPostExecute(List recordingList) {
super.onPostExecute(recordingList);
rAdapter.notifyDataSetChanged();
}
public void getFiles(String directoryName){
File directory = new File(directoryName);
Log.v("FilesListFragment", "getFiles();");
File[] fileList = directory.listFiles();
for(File file: fileList){
if(file.isFile() && !files.contains(file)){
files.add(file);
}
/*
else if(file.isDirectory()){
files(file.getAbsoluteFile(), false);
}
*/
}
updateRecordingsList();
}
public void updateRecordingsList(){
for(int i = 0; i < files.size(); i++) {
boolean fileFound = false;
for (int j = 0; j < recordingsList.size(); j++) {
if (recordingsList.get(j).getFile().equals(files.get(i))) {
fileFound = true;
}
}
if(fileFound != true){
recordingsList.add(new Recording(files.get(i), new Date(files.get(i).lastModified())));
}
}
if(rAdapter != null) {
Log.i("FileListFragment", "notifyDataSetChanged()");
}
//Collections.sort(recordingsList);
}
}
}
11-13 20:00:19.753 3539-3559/com.bacon.corey.audiotimeshift D/OpenGLRenderer﹕ Render dirty regions requested: true
11-13 20:00:19.762 3539-3539/com.bacon.corey.audiotimeshift D/Atlas﹕ Validating map...
11-13 20:00:19.846 3539-3560/com.bacon.corey.audiotimeshift V/FilesListFragment﹕ getFiles();
11-13 20:00:19.851 3539-3560/com.bacon.corey.audiotimeshift E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.bacon.corey.audiotimeshift, PID: 3539
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to get length of null array
at com.bacon.corey.audiotimeshift.FilesListFragment$UpdateDataSet.getFiles(FilesListFragment.java:124)
at com.bacon.corey.audiotimeshift.FilesListFragment$UpdateDataSet.doInBackground(FilesListFragment.java:107)
at com.bacon.corey.audiotimeshift.FilesListFragment$UpdateDataSet.doInBackground(FilesListFragment.java:103)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)