我正在尝试使用WorkManager将位图上传到服务器。基本上,用户拍照并按下按钮将其上传到服务器。
然而,问题出现在我尝试使用Work Manager的Data.Builder类序列化位图时,该类有10240字节的限制。因此,如果我执行以下操作:
val data = Data.Builder()
//Add parameter in Data class. just like bundle. You can also add Boolean and Number in parameter.
data.putString(IMAGE_NAME, identifier)
data.putByteArray(BITMAP_ARRAY, imageBytes)
以下崩溃将被抛出:
java.lang.IllegalStateException: 数据在序列化时不能占用超过10240字节
我可以在启动工作管理器之前将照片保存到文件中,在工作管理器中读取该文件。但如果可能的话,我宁愿避免所有文件管理,因为用户可能会关闭应用程序等。如果服务器响应成功,我只想要保存文件。
有没有其他方法可以实现这一点?是否有Google针对这种情况的“建议”?
这是我的
doWork()
的WorkManager功能。 override fun doWork(): Result {
val identifier = inputData.getString(IMAGE_NAME)!!
val imageBytes = inputData.getByteArray(BITMAP_ARRAY)!!
val result = executeRequest(identifier, imageBytes)
return if (result.isSuccess()) {
//saving image
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
saveToInternalStorage(context, identifier, bitmap)
Result.success()
} else {
Result.failure()
}
}
UUID.randomUUID().toString()
为每个作业创建唯一的文件名。然后在文件上传和删除后,仅从doWork()
返回Result.success()
。由于 WorkManager 的保证,不需要在应用程序启动期间检查是否有任何文件剩余要上传。 - Enselic