1
我对UniversalImageLoader的查询不是特别的,但是因为我尝试使用内容流加载图像,所以我遇到了以下问题。即使请求相同,Java InputSream hascode每次都不相同
我正在使用输入流“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);
}
}
});
}
你能展示你如何得到你的图像流?从哪里来? – NOSTRA
您正在打开流并根据我所看到的比较它们的hash值。 IDK是流哈希合约,但对于普通对象来说,它只是他们的地址。新流=新对象=新地址。如果我的理论是正确的,你不能用hashCode来比较它们。您必须编写自己的比较方法或预先发送图像的md5,以便可以将网络图像的md5与本地副本md5进行比较。 – HopefullyHelpful
@HopefullyHelpful感谢您的评论这可能是两个不同的对象。但是,如果您注意到两个Log.d中的inputStream对象都是相同的。就像调用两个同一个对象的代码一样,你会得到两个不同的答案。我不确定这是如何哈希代码的作品。 – Sudhir