OKHTTP 3 Seguimiento del progreso de subida de varias partes
¿Cómo puedo seguir el progreso de la subida en OkHttp 3 Puedo encontrar respuestas para v2 pero no v3, como esto
Una muestra de solicitud de varias partes de recetas de OkHttp
- Consiguió este error con retrofit2 y OkHttp3. No se puede resolver el host "<host-name>": ninguna dirección asociada con el nombre de host
- Android java.security.cert.CertPathValidatorException: Ancla de confianza para la ruta de certificación no encontrada
- ¿Cuál es la diferencia entre .string () y .toString () para OkHttp?
- OkHttp 3 y HttpURLConnection
- ¿Cómo enviar post parámetros dinámicamente (o en bucle) en OKHTTP 3.x en android?
private static final String IMGUR_CLIENT_ID = "..."; private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); private final OkHttpClient client = new OkHttpClient(); public void run() throws Exception { // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "Square Logo") .addFormDataPart("image", "logo-square.png", RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png"))) .build(); Request request = new Request.Builder() .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID) .url("https://api.imgur.com/3/image") .post(requestBody) .build(); Response response = client.newCall(request).execute(); if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(response.body().string()); }
- If-None-Match no se pasa en mi solicitud
- OkHttp con pinzado de certificado
- Certificado de certificado okHTTP cuadrado - error sslSocketFactory
- OkHttpClient tiene un recuento máximo de reintentos
- Cómo obtener el cuerpo de la respuesta en okhttp cuando el código es 401
- Android con Retrofit2 OkHttp3 - Error POST de varias partes
- Okhttp siempre reintento conexión fallida
- "Return response.body (). String ()" está vacío con okhttp3
Envuelva su RequestBody MultiPart en este RequestBody con instancia de Listener y Voila!
public class ProgressRequestBody extends RequestBody { protected RequestBody mDelegate; protected Listener mListener; protected CountingSink mCountingSink; public ProgressRequestBody(RequestBody delegate, Listener listener) { mDelegate = delegate; mListener = listener; } @Override public MediaType contentType() { return mDelegate.contentType(); } @Override public long contentLength() { try { return mDelegate.contentLength(); } catch (IOException e) { e.printStackTrace(); } return -1; } @Override public void writeTo(BufferedSink sink) throws IOException { mCountingSink = new CountingSink(sink); BufferedSink bufferedSink = Okio.buffer(mCountingSink); mDelegate.writeTo(bufferedSink); bufferedSink.flush(); } protected final class CountingSink extends ForwardingSink { private long bytesWritten = 0; public CountingSink(Sink delegate) { super(delegate); } @Override public void write(Buffer source, long byteCount) throws IOException { super.write(source, byteCount); bytesWritten += byteCount; mListener.onProgress((int) (100F * bytesWritten / contentLength())); } } public interface Listener { void onProgress(int progress); } }
Según la respuesta de Sourabh, quiero decirle a ese campo de CountingSink
private long bytesWritten = 0;
Debe moverse a la clase ProgressRequestBody