MultiPart出现内存问题

时间:2018-09-24 15:21:05

标签: java android kotlin retrofit multipart

上传图像不起作用。 它有内存问题。

当我调用API时,我的应用程序停止了。然后多次调用GC,并抛出TimeOut异常。

我考虑过使用Bitmap.Compress压缩图像文件,但是调用compress也需要大量内存。

我不知道上传图像的最佳方法是什么。 你们可以帮我吗?

这是ApiInterface

@Multipart
@POST("memo/update")
fun updateMemo(
        @Header("token") token: String,
        @Part("content") content: RequestBody,
        @Part("location") location: RequestBody,
        @Part("id") id : RequestBody,         
        @Part imgFile: MultipartBody.Part?)
        : Observable<JsonObject>

此方法返回MultiPart.Body

private fun toMultipartBody(uri: Uri?): MultipartBody.Part? {
    uri?.let {
        val file = File(it.path)

        val requestFile = RequestBody.create(MediaType.parse("image/*"), file)

        return MultipartBody.Part.createFormData(memo::memoFile.name, file.name, requestFile)
    }
    return null
}

这是一个方法调用API。

 private fun updateMemo() {
    disposables.add(
            service.updateMemo(
                    TipTapApplication.getAccessToken(),
                    toRequestBody(memo.content),
                    toRequestBody(memo.location),
                    toRequestBody(memo.latitude),
                    toRequestBody(memo.longitude),
                    toRequestBody(memo.id.toString()),
                    toMultipartBody(imgUri))

               .subscribeOn(Schedulers.io())
                    .subscribeWith(object : DisposableObserver<JsonObject>() {
                        override fun onNext(t: JsonObject) {
                        }

                        override fun onComplete() {

                            finish()
                        }

                        override fun onError(e: Throwable) {
                            e.printStackTrace()
                        }
                    }))
}

0 个答案:

没有答案