Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to download image file by using okhttpclient in Java

Tags:

I would like ask how to download image file by using okhttpclient in Java since I need to download the file with session.
here is the code given officially, but I don't know how to use it for downloading as image file.

private final OkHttpClient client = new OkHttpClient();    public void run() throws Exception {     Request request = new Request.Builder()         .url("http://publicobject.com/helloworld.txt")         .build();      Response response = client.newCall(request).execute();     if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);      Headers responseHeaders = response.headers();     for (int i = 0; i < responseHeaders.size(); i++) {       System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));     }      System.out.println(response.body().string());   } 
like image 432
user3338304 Avatar asked Nov 01 '14 12:11

user3338304


People also ask

What is Okhttpclient in Java?

OkHttp is an efficient HTTP & HTTP/2 client for Android and Java applications. It comes with advanced features, such as connection pooling (if HTTP/2 isn't available), transparent GZIP compression, and response caching, to avoid the network completely for repeated requests.

How do I use Okhttpclient on Android?

OkHttp Query Parameters ExampleBuilder urlBuilder = HttpUrl. parse("https://httpbin.org/get).newBuilder(); urlBuilder. addQueryParameter("website", "www.journaldev.com"); urlBuilder. addQueryParameter("tutorials", "android"); String url = urlBuilder.

Is OkHttp asynchronous?

OkHttp doesn't currently offer asynchronous APIs to receive a response body in parts.


2 Answers

Try something like this

InputStream inputStream = response.body().byteStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
like image 121
Jodi Goddard Avatar answered Sep 17 '22 14:09

Jodi Goddard


Maybe it is a bit late to answer the question, but it may helps someone in the future. I prefer always to download photos in background, to do so using OkHttpClient, you should use callback:

    final Request request = new Request.Builder().url(url).build();     okHttpClient.newCall(request).enqueue(new Callback() {                 @Override                 public void onFailure(Call call, IOException e) {                     //Handle the error                 }                  @Override                 public void onResponse(Call call, Response response) throws IOException {                     if (response.isSuccessful()){                         final Bitmap bitmap = BitmapFactory.decodeStream(response.body().byteStream());                        // Remember to set the bitmap in the main thread.                         new Handler(Looper.getMainLooper()).post(new Runnable() {                                 @Override                                 public void run() {                                     imageView.setImageBitmap(image);                                 }                             });                     }else {                         //Handle the error                     }                 }             }); 
like image 27
OfcOurSe Avatar answered Sep 19 '22 14:09

OfcOurSe