Google Play开发者控制台报告称File.toURI()方法导致ANR(应用程序未响应)错误:
at libcore.io.Posix.stat(Native Method)
at libcore.io.ForwardingOs.stat(ForwardingOs.java:131)
at java.io.File.isDirectory(File.java:529)
at java.io.File.getAbsoluteName(File.java:1104)
at java.io.File.toURI(File.java:1062)
at com.mypackage.myclass.<init>(SourceFile:1234)
是否有另一种方法在主线程上执行此操作(因为使用后台线程看起来有点矫枉过正)?
答案 0 :(得分:0)
不建议直接在UI或主线程上执行任务。在您的情况下,请尝试 AsyncTask 。请查看here示例。
答案 1 :(得分:0)
如果文件路径已经是绝对路径,并且您已经知道文件是否是目录:
public static String toURI(File f, boolean isDirectory) {
try {
String sp = slashify(f.getPath(), isDirectory);
if (sp.startsWith("//")) {
sp = "//" + sp;
}
return new URI("file", null, sp, null);
}
catch (URISyntaxException x) {
throw new Error(x); // Can't happen
}
}
private static String slashify(String path, boolean isDirectory) {
String p = path;
if (File.separatorChar != '/')
p = p.replace(File.separatorChar, '/');
if (!p.startsWith("/"))
p = "/" + p;
if (!p.endsWith("/") && isDirectory)
p = p + "/";
return p;
}