【发布时间】:2020-09-02 14:12:17
【问题描述】:
我想显示来自为我提供图像原始数据(png 或 JPG)的 URL 中的图像。
我检查了这个link,但没有多大用处。
这是我的头像link
我正在处理原始数据,但看不到图像。我不确定如何检查我是否获得了正确的原始数据。
这是我的努力
private class DownloadImageTask extends AsyncTask<String, Void, Void> {
byte[] bytes;
Bitmap picture = null;
@Override
protected Void doInBackground(String... urls) {
// final OkHttpClient client = new OkHttpClient();
//
// Request request = new Request.Builder()
// .url(urls[0])
// .build();
//
// Response response = null;
//
// try {
// response = client.newCall(request).execute();
// } catch (IOException e) {
// e.printStackTrace();
// }
// assert response != null;
// if (response.isSuccessful()) {
// try {
// assert response.body() != null;
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// IOUtils.copy(response.body().byteStream(), baos);
// bytes = baos.toByteArray();
// picture = BitmapFactory.decodeStream(response.body().byteStream());
// } catch (Exception e) {
// Log.e("Error", Objects.requireNonNull(e.getMessage()));
// e.printStackTrace();
// }
//
// }
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
URL url = new URL(urls[0]);
byte[] chunk = new byte[4096];
int bytesRead;
InputStream stream = url.openStream();
while ((bytesRead = stream.read(chunk)) > 0) {
outputStream.write(chunk, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
bytes = outputStream.toByteArray();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (bytes != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
cameraView.setImageBitmap(bitmap);
}
// cameraView.setImageBitmap(picture);
}
}
【问题讨论】:
-
图像的原始数据是什么意思?你不只是下载一个像.jpg或.png这样的图像文件吗?
-
不,来自 url 的原始格式的数据,所以我需要将其转换为图像
-
您的代码看起来可以下载图像文件。如果您不确定接收到正确的字节,请将它们保存到文件中并检查图像查看器是否可以播放它。
-
重复:原始格式是什么意思?您正在尝试将字节转换为位图。你检查过 bimap==null 吗?
-
@blackapps 这里是我从pastebin.com/tifdC2K3获取数据的链接
标签: android