Ich verwende den OKHTTP-Client für das Netzwerk in meiner Android-Anwendung.
Dieses Beispiel zeigt, wie eine Binärdatei hochgeladen wird. Ich würde gerne wissen, wie man einen Inputstream für das Herunterladen von Binärdateien mit dem OKHTTP-Client erhält.
Hier ist die Auflistung des Beispiels:
public class InputStreamRequestBody extends RequestBody {
private InputStream inputStream;
private MediaType mediaType;
public static RequestBody create(final MediaType mediaType,
final InputStream inputStream) {
return new InputStreamRequestBody(inputStream, mediaType);
}
private InputStreamRequestBody(InputStream inputStream, MediaType mediaType) {
this.inputStream = inputStream;
this.mediaType = mediaType;
}
@Override
public MediaType contentType() {
return mediaType;
}
@Override
public long contentLength() {
try {
return inputStream.available();
} catch (IOException e) {
return 0;
}
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
Source source = null;
try {
source = Okio.source(inputStream);
sink.writeAll(source);
} finally {
Util.closeQuietly(source);
}
}
}
Der aktuelle Code für eine einfache Abrufanforderung lautet:
OkHttpClient client = new OkHttpClient();
request = new Request.Builder().url("URL string here")
.addHeader("X-CSRFToken", csrftoken)
.addHeader("Content-Type", "application/json")
.build();
response = getClient().newCall(request).execute();
Wie konvertiere ich nun die Antwort in InputStream
. Etwas Ähnliches wie eine Antwort von Apache HTTP Client
dieser für die OkHttp
Antwort:
InputStream is = response.getEntity().getContent();
BEARBEITEN
Akzeptierte Antwort von unten. Mein geänderter Code:
request = new Request.Builder().url(urlString).build();
response = getClient().newCall(request).execute();
InputStream is = response.body().byteStream();
BufferedInputStream input = new BufferedInputStream(is);
OutputStream output = new FileOutputStream(file);
byte[] data = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();