我正在循环一个返回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;
}
答案 0 :(得分:1)
在代码的else
部分和第一行中,您只是从DocumentFile
的URI创建一个新的sd-card
,然后在第二行,您尝试在sd-card
的根目录中找到一个文件,它不提供任何内容。
在你从用户提供的URI中获取null后,我无法猜测你的其他部分背后的逻辑。
如果从此方法中获取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,则要求用户输入正确的路径
请参阅我之前的解释here