«E /Perf: GetFoldersize(): Exception_1 = java.lang.Исключение NullPointerException: попытка получить длину нулевого массива»

#java #android

#java #Android

Вопрос:

Я пытаюсь создать приложение, которое загружает и воспроизводит музыку. Чтобы запретить пользователям копировать музыкальные файлы, я хочу зашифровать файл сразу после его загрузки. Я борюсь с кодом в течение нескольких дней, но не могу выяснить, что вызывает ошибки. Вот соответствующий код —

 private BroadcastReceiver onDownloadComplete = new BroadcastReceiver() {
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onReceive(Context context, Intent intent) {
        long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
        if (downloadID == id) {
            Toast.makeText(DownloadActivity.this, "Download completed", Toast.LENGTH_SHORT).show();

            Context appContext = getApplicationContext();
            MasterKey mainKey = new MasterKey.Builder(appContext)
                    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
                    .build();

            String fileToWrite = songName   ".mp3";
            EncryptedFile encryptedFile = new EncryptedFile.Builder(context,
                    new File(getExternalFilesDir(null), fileToWrite),
                    mainKey,
                    EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
            ).build();

            byte[] fileContent = convert(getExternalFilesDir(null).getAbsolutePath()   "/"   songName   ".mp3");
            OutputStream outputStream = encryptedFile.openFileOutput();
            outputStream.write(fileContent);
            outputStream.flush();
            outputStream.close();
        }
    }

    public byte[] convert(String path) throws IOException {

        FileInputStream fis = new FileInputStream(path);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];

        for (int readNum; (readNum = fis.read(b)) != -1;) {
            bos.write(b, 0, readNum);
        }

        byte[] bytes = bos.toByteArray();

        return bytes;
    }
};

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(onDownloadComplete);
}
 

Я также добавляю необходимые строки с помощью try-catch . Удалил его здесь для упрощения кода.

Кроме того, я был бы очень признателен, если бы мог получить совет о том, как лучше всего воспроизводить зашифрованные аудиофайлы, сохраняя их в безопасности. Является ли создание временного файла для воспроизведения хорошим вариантом?

Комментарии:

1. О каких ошибках вы говорите в своем сообщении?