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