Skip to content

Commit b359bc6

Browse files
committed
Demonstration of how to download binary images
1 parent 045b648 commit b359bc6

File tree

2 files changed

+110
-4
lines changed

2 files changed

+110
-4
lines changed

example/src/main/java/com/codepath/example/TestActivity.java

+34-4
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,30 @@
44
import androidx.appcompat.app.AppCompatActivity;
55

66
import android.os.Bundle;
7+
import android.os.Environment;
78
import android.util.Log;
89
import android.view.View;
910

1011
import com.codepath.asynchttpclient.AsyncHttpClient;
1112
import com.codepath.asynchttpclient.RequestHeaders;
1213
import com.codepath.asynchttpclient.RequestParams;
14+
import com.codepath.asynchttpclient.callback.BinaryHttpResponseHandler;
1315
import com.codepath.asynchttpclient.callback.JsonHttpResponseHandler;
1416
import com.codepath.asynchttpclient.callback.TextHttpResponseHandler;
1517

18+
import java.io.BufferedInputStream;
19+
import java.io.BufferedOutputStream;
20+
import java.io.ByteArrayOutputStream;
21+
import java.io.File;
22+
import java.io.FileOutputStream;
1623
import java.io.IOException;
24+
import java.io.InputStream;
25+
1726
import okhttp3.Headers;
1827
import okhttp3.MediaType;
1928
import okhttp3.MultipartBody;
2029
import okhttp3.RequestBody;
30+
import okhttp3.Response;
2131
import okio.BufferedSource;
2232
import okio.ByteString;
2333
import okio.Okio;
@@ -92,11 +102,31 @@ public void onFailure(int statusCode, Headers headers, String response, Throwabl
92102

93103
}
94104

95-
client.post("https://api.thecatapi.com/v1/images/search", "test", new JsonHttpResponseHandler() {
105+
client.get("https://cdn2.thecatapi.com/images/6eg.jpg", new BinaryHttpResponseHandler() {
96106
@Override
97-
public void onSuccess(int statusCode, Headers headers, JSON json) {
98-
Log.d("DEBUG", json.toString());
99-
107+
public void onSuccess(int statusCode, Headers headers, Response response) {
108+
try {
109+
// ~/Library/Android/sdk/platform-tools/adb pull /sdcard/Android/data/com.codepath.cpasynchttpclient/files/Pictures/TEST/test.jpg
110+
File mediaStorageDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "TEST");
111+
112+
// Create the storage directory if it does not exist
113+
if (!mediaStorageDir.exists() && !mediaStorageDir.mkdirs()){
114+
Log.d("DEBUG", "failed to create directory");
115+
}
116+
117+
// Return the file target for the photo based on filename
118+
InputStream data = response.body().byteStream();
119+
File file = new File(mediaStorageDir.getPath() + File.separator + "test.jpg");
120+
FileOutputStream outputStream = new FileOutputStream(file);
121+
byte[] buffer = new byte[2048];
122+
int len;
123+
while ( (len = data.read(buffer)) != -1) {
124+
outputStream.write(buffer, 0, len);
125+
}
126+
Log.e("DEBUG", "done!");
127+
} catch (IOException e) {
128+
Log.e("DEBUG", e.toString());
129+
}
100130
}
101131

102132
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.codepath.asynchttpclient.callback;
2+
3+
import android.os.Handler;
4+
import android.os.Looper;
5+
6+
import androidx.annotation.Nullable;
7+
8+
import com.codepath.asynchttpclient.AbsCallback;
9+
10+
import org.jetbrains.annotations.NotNull;
11+
12+
import java.io.ByteArrayOutputStream;
13+
import java.io.IOException;
14+
import java.io.InputStream;
15+
16+
import okhttp3.Call;
17+
import okhttp3.Headers;
18+
import okhttp3.Response;
19+
import okhttp3.ResponseBody;
20+
21+
public abstract class BinaryHttpResponseHandler implements AbsCallback {
22+
23+
private static int INTERNAL_ERROR = 500;
24+
25+
public BinaryHttpResponseHandler() {
26+
}
27+
28+
@Override
29+
public void onFailure(@NotNull Call call, @NotNull IOException e) {
30+
this.onFailure(INTERNAL_ERROR, null, e.toString(), e);
31+
}
32+
33+
@Override
34+
public void onResponse(@NotNull Call call, @NotNull final Response response)
35+
throws IOException {
36+
37+
final BinaryHttpResponseHandler handler = this;
38+
39+
final int responseCode = response.code();
40+
final Headers responseHeaders = response.headers();
41+
42+
Runnable runnable = null;
43+
44+
if (response.isSuccessful()) {
45+
runnable = new Runnable() {
46+
@Override
47+
public void run() {
48+
handler.onSuccess(responseCode, responseHeaders, response);
49+
}
50+
};
51+
} else {
52+
try (final ResponseBody responseBody = response.body()) {
53+
54+
final String responseString = responseBody.string();
55+
runnable = new Runnable() {
56+
@Override
57+
public void run() {
58+
handler.onFailure(responseCode, responseHeaders, responseString, null);
59+
}
60+
};
61+
} catch (IOException e) {
62+
handler.onFailure(INTERNAL_ERROR, null, e.toString(), e);
63+
}
64+
}
65+
66+
// run on main thread to keep things simple
67+
new Handler(Looper.getMainLooper()).post(runnable);
68+
69+
}
70+
71+
public abstract void onSuccess(int statusCode, Headers headers, Response response);
72+
73+
public abstract void onFailure(int statusCode, @Nullable Headers headers, String errorResponse, @Nullable Throwable throwable);
74+
75+
}
76+

0 commit comments

Comments
 (0)