Попытка получить длину нулевого массива Kotlin

#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 возвращает нулевой массив, если папка пуста?