Ошибка ссылки на нулевой объект при записи файла (ByteArray) и возвращении Uri - PullRequest
0 голосов
/ 29 ноября 2018

Я написал эту функцию, чтобы сохранить файл и вернуть файл Uri.Но root и file vars всегда пусты, поэтому в конце бросается NPE.

fun writeFile(context: Context, fileName: String, body: ByteArray): Uri? {
        val fname = "${Environment.getExternalStorageDirectory().absolutePath}/ardata"
        val root = File(fname)
        if (!root.exists()) {
            root.mkdirs()
        }

        try {
            val file = File(root, fileName)
            file.writeBytes(body)
            file.setExecutable(true)
            return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return null
    }

return throwsNPE с сообщением:

Попытка вызвать виртуальный метод 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData (android.content.pm.PackageManager, java.lang.String) 'для ссылки на пустой объект

Вот так выглядят мои переменные в конце функции

variables

Как я могу сохранить файл (ByteArray) и вернуть Uri?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Я изменил возврат на Uri.parse и работал

    val fname = "${Environment.getExternalStorageDirectory().absolutePath}/ardata"
    val root = File(fname)
    if (!root.exists()) {
        root.mkdirs()
    }

    try {
        val file = File(root, fileName)
        file.writeBytes(body)
        file.setExecutable(true)
        val obj = file.path
        return Uri.parse(obj)
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return null
0 голосов
/ 29 ноября 2018

Вы можете использовать

 val path = Environment.getExternalStorageDirectory().toString();
                OutputStream fOut;
                File file = File(path, System.currentTimeMillis().toString() + ".mp4");
                    fOut = FileOutputStream(file);
        fos.write(byteArray);
        fos.close();
Uri uri = Uri.fromFile(file);
return uri;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...