Разница между RequestBody и MultipartBody библиотеки OkHttp3?

Я новичок в Android и Http и пытаюсь создать задачу загрузки изображения с помощью Retrofit2. Я использую пример, приведенный здесь.

В этом примере автор объяснил, почему мы должны использовать RequestBody или MultipartBody. Я не могу понять разницу и как мне загрузить несколько тегов (строк) с моим изображением.

Может ли кто-нибудь помочь, что автор имеет в виду под:

Описание — это просто строковое значение, заключенное в экземпляр RequestBody. Во-вторых, в запросе есть еще одна @Part: собственно файл. Мы используем класс MultipartBody.Part, который позволяет нам отправлять фактическое имя файла помимо данных двоичного файла с запросом.


person user2601981    schedule 17.07.2016    source источник
comment
MultipartBody.Part — это вложенный класс, а MultipartBody кажется расширением RequestBody, так в чем путаница?   -  person OneCricketeer    schedule 17.07.2016


Ответы (3)


Проще говоря, RequestBody можно использовать для запроса json/String, а MultipartBody можно использовать для запроса файлов (изображений, документов...)

person SaravInfern    schedule 17.07.2016
comment
но, согласно тому, что сказал @cricket_007, RequestBody является абстрактным... Итак, как бы вы реализовали его для запросов JSON/String? - person SebasSBM; 27.05.2019

RequestBody: используется при отправке данных на сервер простым способом.

MultipartBody: используется при разбиении данных в запросе POST на разные дискретные типы и отправке на сервер.

person Amit Shekhar    schedule 17.07.2016
comment
Для типа контента: application/json мы просто отправляем объект модели, который автоматически преобразуется в Json и отправляется через OkHttp. Всегда ли OkHttp внутренне преобразует все в RequestBody, а затем отправляет его? - person user2601981; 18.07.2016

A MultipartBody IS-A (конкретная реализация) RequestBody

public final class MultipartBody extends RequestBody

Основное отличие состоит в том, что классу предоставляется List<Part> parts по сравнению с отсутствием его в RequestBody.

RequestBody сам по себе является абстрактным, что означает, что вы не можете создать его напрямую. Когда вы получаете его из метода, это один из его потомков, например FormBody

Вы можете сравнить исходный код для выявления точных различий. .

person OneCricketeer    schedule 17.07.2016
comment
это было полезно знать :) - person SpyZip; 08.02.2018