代码之家  ›  专栏  ›  技术社区  ›  yasin

写入文件(ByteArray)并返回Uri时出现空对象引用错误

  •  0
  • yasin  · 技术社区  · 7 年前

    我编写这个函数是为了保存一个文件并返回文件Uri。但是 文件 变量总是空的,所以它在最后抛出一个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
        }
    

    这个 返回 抛出带有以下消息的NPE:

    android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,

    这就是我的变量在函数末尾的样子

    variables

    2 回复  |  直到 7 年前
        1
  •  0
  •   yasin    7 年前

    我将返回值改为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
    
        2
  •  0
  •   Vikash Bijarniya    7 年前

     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;