多次循环使用方法会导致错误



>我正在循环一个返回 DocumentFile 100 次甚至更多次的方法。很多时候,该方法返回 null,而它已经被循环了大约 35 次。

这是正在循环的方法。

public  static DocumentFile documentfile(final File file ) {
for (UriPermission permissionUri :con.getContentResolver().getPersistedUriPermissions()) {
DocumentFile rootDocFile = DocumentFile.fromTreeUri(con, permissionUri.getUri());
String[] parts = (file.getPath()).split("\/");
for (int i = 3; i < parts.length; i++) {
if (rootDocFile != null)
{
rootDocFile = rootDocFile.findFile(parts[i]);
}
else {
rootDocFile = DocumentFile.fromTreeUri(con,permissionUri.getUri() );
rootDocFile = rootDocFile.findFile(parts[i]);
}
}

return rootDocFile;
}
return null;
}

这就是我循环方法的方式

for(int i=0;i<size;i++)
{
documentfile(file).createFile(mime, name)
}

上述所有代码都在异步任务中执行。

任何帮助将不胜感激。

编辑:尝试使用更新的代码,但仍然收到相同的错误。

更新的代码

public static DocumentFile DocumentFile(final File file)
{
DocumentFile rootDocFile = DocumentFile.fromTreeUri(con, permission().getUri());
String[] parts = (file.getPath()).split("\/");
for (int i = 3; i < parts.length; i++)
{
rootDocFile = rootDocFile.findFile(parts[i]);
}
return rootDocFile;
}
public static UriPermission permission()
{
for (UriPermission permissionUri : con.getContentResolver().getPersistedUriPermissions())
{
final File uri_path = new File(FileUtil.getFullPathFromTreeUri(permissionUri.getUri(), con));
if (uri_path.getName().toLowerCase().equals(new File("SD_CARD_PATH").getName().toLowerCase()))
{
return permissionUri;
}
}
return null;
}

这就是我检查授予的权限是否适用于SD卡的方式

public static boolean wrong_directory_selected(Uri uri, Context con)
{
final File uri_path=new File(FileUtil.getFullPathFromTreeUri(uri,con));
if(uri_path.getName().toLowerCase().equals(new File("SD CARD PATH").getName().toLowerCase()))
{
return false;
}
return  true;
}

在代码的else部分和第一行,您仅从sd-card的 URI 创建一个新DocumentFile,然后在第二行,您尝试在sd-card的根目录上找到一个文件,该文件不提供任何内容。

在您从用户提供的 URI 中获取 null 后,我无法猜测您的 else 部分背后的逻辑。

当您从此方法获得 null 时,这意味着用户被选错了目录作为sd-card。 因此,您要做的第一件事是要求用户提供正确的sd-card路径。

public static DocumentFile documentfile(final File file ) {   
for (UriPermission permissionUri : con.getContentResolver().getPersistedUriPermissions()) {   
DocumentFile rootDocFile = DocumentFile.fromTreeUri(con, permissionUri.getUri());    
String[] parts = (file.getPath()).split("/");    
for (int i = 3; i < parts.length; i++) {        
if (rootDocFile != null) {
rootDocFile = rootDocFile.findFile(parts[i]);
}
if (rootDocFile != null) {
break;
}
//else {
//    rootDocFile = DocumentFile.fromTreeUri(con, permissionUri.getUri());
//    rootDocFile = rootDocFile.findFile(parts[i]);
//}        
}
}
return rootDocFile;
}

如果rootDocFile为 null,则要求用户输入正确的路径

请在此处查看我之前的解释

相关内容

  • 没有找到相关文章

最新更新