Android 应用程序违反了自我强制严格模式违反
我正在应用程序中的SD卡的listview中显示文件。我在异步任务中做这件事。当我在listview中单击一个项目(文件)时,它会出现以下错误Android 应用程序违反了自我强制严格模式违反,android,android-strictmode,Android,Android Strictmode,我正在应用程序中的SD卡的listview中显示文件。我在异步任务中做这件事。当我在listview中单击一个项目(文件)时,它会出现以下错误 11-28 09:39:40.426 26402-26402/app.comser D/StrictMode﹕ StrictMode policy violation; ~duration=3 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2
11-28 09:39:40.426 26402-26402/app.comser D/StrictMode﹕ StrictMode policy violation; ~duration=3 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1137)
at libcore.io.BlockGuardOs.stat(BlockGuardOs.java:292)
at java.io.File.isDirectory(File.java:524)
at customize.FilesExplorer$2.onItemClick(FilesExplorer.java:120)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
at android.widget.AbsListView.onTouchUp(AbsListView.java:3845)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3617)
at android.view.View.dispatchTouchEvent(View.java:8393)
我已经添加了异步任务文件代码
class FilesList_AsyncTask extends AsyncTask<Void,Integer,String>
{
File file;
FilesList_AsyncTask(File file)
{
this.file = file;
}
@Override
protected String doInBackground(Void... params)
{
System.out.println("-----------" + file);
File[] filesArray = null;
filesList=new ArrayList<File>();
fileNamesList=new ArrayList<String>();
/*
* If the selected File is directory and has any files add them to File type of array
*/
if(file.isDirectory())
{
filesArray=file.listFiles();
selectedFolder=file;
}
/*
* If the File array has any items, add the filenames and files of the items to corresponding arraylist.
* fileNamesList contains names of files in the folder.
* filesList contains paths of the files in the folder.
*/
if(filesArray!=null)
{
for (int i = 0; i < filesArray.length; i++)
{
fileNamesList.add(filesArray[i].getName());
filesList.add(filesArray[i]);
getFileExtension(filesArray[i].getName(),filesArray[i]);
// System.out.println("=================="+filesArray[i]);
}
Log.d("filenames size...", fileNamesList.size() + "");
if(fileNamesList.size()>0)
{
filesDialog(fileNamesList, filesList);
}
else
{
Toast.makeText(FilesExplorer.this, "No Sub Items Available", Toast.LENGTH_SHORT).show();
}
}
return null;
}
}
class FilesList\u AsyncTask扩展了AsyncTask
{
文件;
文件列表\u异步任务(文件)
{
this.file=文件;
}
@凌驾
受保护字符串doInBackground(无效…参数)
{
System.out.println(“--------------”+文件);
File[]filesArray=null;
filesList=newarraylist();
fileNamesList=newarraylist();
/*
*如果选定的文件是目录,并且有任何文件,请将它们添加到数组的文件类型
*/
if(file.isDirectory())
{
filesArray=file.listFiles();
selectedFolder=文件;
}
/*
*如果文件数组有任何项,请将这些项的文件名和文件添加到相应的arraylist中。
*fileNamesList包含文件夹中的文件名。
*文件列表包含文件夹中文件的路径。
*/
if(filesArray!=null)
{
for(int i=0;i0)
{
文件对话框(文件名列表、文件列表);
}
其他的
{
Toast.makeText(fileexplorer.this,“无可用子项”,Toast.LENGTH_SHORT.show();
}
}
返回null;
}
}
提前感谢如果AsyncTask解决方案不起作用,您可以按如下方式关闭严格模式
StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old)
.permitDiskWrites()
.build());
doCorrectStuffThatWritesToDisk();
StrictMode.setThreadPolicy(old);
看起来您没有正确实现和/或执行AsyncTask。@Mike我已经添加了AsyncTask代码供您参考。您如何执行AsyncTask?实际上,您的
onItemClick监听器中的整个onItemClick()
方法是什么?谢谢您的回复。doCorrectStuffThatWritesToDisk()方法中的代码是什么?@Mike。我会尝试一下,然后回来。谢谢