MultiPart с проблемой памяти - PullRequest
       29

MultiPart с проблемой памяти

0 голосов
/ 24 сентября 2018

Загрузить изображение не работает.У него проблема с памятью.

Когда я вызываю 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()
                        }
                    }))
}
...