#java #android #kotlin
#java #Android #kotlin
Вопрос:
Пожалуйста, скажите мне, в чем может быть проблема. есть 2 идентичных приложения (на Java и эквивалент в kotlin) с одинаковыми разрешениями
<uses-permission android: name = "android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />
эти приложения имеют один и тот же класс Java
public class ShinimaHuynya {
private static ShinimaHuynya instance;
public static ShinimaHuynya getInstance () {
return instance;
}
ShinimaHuynya () {
this.instance = this;
}
boolean requestPermission (Activity ac) {
if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.M) {
if (ac.checkSelfPermission (Manifest.permission.WRITE_EXTERNAL_STORAGE)! = PackageManager.PERMISSION_GRANTED) {
ac.requestPermissions (new String [] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
return false;
} else {
return true;
}
} else {
return true;
}
}
public void freeAllAppsCache (Handler handler) throws Exception {
Context context = App.Companion.getInstance (). GetApplicationContext ();
File externalDir = context.getExternalCacheDir ();
if (externalDir! = null) {
PackageManager pm = context.getPackageManager ();
for (ApplicationInfo info: pm.getInstalledApplications (256)) {
File externalCache = new File (externalDir.getAbsolutePath (). Replace (context.getPackageName (), info.packageName));
if (externalCache.exists () amp;amp; externalCache.isDirectory ()) {
try {
deleteFile (externalCache);
} catch (Exception e) {
e.printStackTrace ();
}
}
}
...
}
public boolean deleteFile (File file) throws Exception {
if (file.isDirectory ()) {
for (String name: file.list ()) {
if (! deleteFile (new File (file, name))) {
return false;
}
}
}
return file.delete ();
}
}
класс называется одинаково в Java (и эквивалентен в kotlin)
Java ——
if (ShinimaHuynya.getInstance (). requestPermission (this))
ShinimaHuynya.getInstance (). FreeAllAppsCache (null)
kotlin —-
if (ShinimaHuynya.getInstance (). requestPermission (this))
ShinimaHuynya.getInstance (). FreeAllAppsCache (null)
при запуске выдаются разрешения, но проблема в том, что функция DeleteFile в Java работает нормально, а в Kotlin она выдает ошибку При попытке получить длину нулевого массива
в
for (String name: file.list ())
в чем проблема, я не могу понять эквиваленты приложений, проверенные на Api 29
Ответ №1:
Может быть, в случае, если вы передали функции удаления нулевой файл? (вы должны проверить в отладчике)
попробуйте изменить ‘if’ на:
@Throws(Exception::class)
fun deleteFile(file: File): Boolean {
if (file.exists()) { // changed if (.exists)
for (name in file.list()) {
if (!deleteFile(File(file, name))) {
return false
}
}
}
return file.delete()
}
(код kotlin)
Комментарии:
1. Файл должен быть папкой? может быть, функция в kotlin возвращает нулевой массив, если папка пуста?