【发布时间】:2017-01-31 22:20:31
【问题描述】:
我有一个不特定于UniversalImageLoader 的查询,但因为我正在尝试使用内容流来加载图像,所以我面临以下问题。
我正在使用输入流“stream://”来使用 ImageLoader。一切正常,除了相同请求的输入流的哈希码生成不同,因此迫使图像加载器再次从网络而不是磁盘下载图像。
我应该怎么做才能解决它。
PS:我尝试关注here的回答
获取 InputStream 的代码是(UtilityMethod 只是一个异步任务):
public void displayContentImage(final String fileId, final ImageView imageView) {
UtilityMethods.startMyTask(new AsyncTask<Object, Void, InputStream>() {
@Override
protected InputStream doInBackground(Object... params) {
CMServiceGateway cmServiceGateway = new CMServiceGateway();
final InputStream inputStream = cmServiceGateway.GetContentAsStream(fileId);
if (inputStream != null) {
//String imageId = "stream://" + inputStream.hashCode();
//Log.d("ImageId :: 1 ::", "file id : " + fileId + "hashcode: " + imageId);
//String imageId2 = "stream://" + cmServiceGateway.GetContentAsStream(fileId).hashCode();
//Log.d("ImageId :: 2 ::", "file id : " + fileId + "hashcode: " + imageId2);
return inputStream;
}
return null;
}
@Override
protected void onPostExecute(InputStream inputStream) {
if (inputStream != null) {
displayImage(inputStream, imageView);
}
}
});
}
【问题讨论】:
-
您能说明如何获取图像流吗?从哪里来?
-
据我所知,您正在打开流并比较它们的 hashValue。 IDK 流哈希的合约,但对于普通对象,它只是它们的地址。新流 = 新对象 = 新地址。如果我的理论是正确的,你不能用 hashCode 来比较它们。你得自己写比较方法或者先发一个图片的md5,这样就可以把网络图片的md5和本地拷贝的md5进行比较。
-
@HopefullyHelpful 感谢您的帮助,这可能适用于两个不同的对象。但是如果您注意到两个 Log.d 中的 inputStream 对象是相同的。这就像一个接一个地调用同一对象的两个hascode,你会得到两个不同的答案。我不确定这是否是哈希码的工作方式。
标签: android inputstream universal-image-loader