Я не знаю, почему возникнет "NullPointerException"
Я пытаюсь записать на SD-карту, используя SAF на терминале Android. В моем коде после создания файла на SD-карте я проверяю статус файла, но в то время некоторые пользователи вызывали "NullPointerException". Несмотря на то, что я только что создал файл, я борюсь, не зная, почему он нулевой.
- Так и есть, но теперь следует блок кода
Ошибка возникает при "if(newFile.canWrite()){".:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } try { countDownLatch = new CountDownLatch(1); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } countDownLatch.countDown(); } }).start(); countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } target_filename= String.valueOf(System.currentTimeMillis()); treeUri = data.getData(); DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri); // Create a new file and write into it newFile = pickedDir.createFile("text", target_filename); for(int i=0;i<10;i++){ newFile=pickedDir.findFile(target_filename); int wait_sd=0; countDownLatch = new CountDownLatch(1); do{ if(newFile.canWrite()){ wait_sd=10; }else{ try { countDownLatch.await(500, TimeUnit.MILLISECONDS); wait_sd++; } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } }while(wait_sd<10); }
2 ответа
Пустой указатель обычно возникает, когда вы забыли инициализировать переменную
или когда вы инициализируете его с помощью метода, который возвращает ноль
в твоем случае
newFile = selectedDir.createFile("text", target_filename); // возвращаем ноль
Это возвращает ноль.
Вы уверены, с разрешения. Я думаю, что это может быть разрешение