2016-09-23 32 views
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); 
      } 
     } 
    }); 
} 
+0

你能展示你如何得到你的圖像流?從哪裏來? – NOSTRA

+0

您正在打開流並根據我所看到的比較它們的hash值。 IDK是流哈希合約,但對於普通對象來說,它只是他們的地址。新流=新對象=新地址。如果我的理論是正確的,你不能用hashCode來比較它們。您必須編寫自己的比較方法或預先發送圖像的md5,以便可以將網絡圖像的md5與本地副本md5進行比較。 – HopefullyHelpful

+0

@HopefullyHelpful感謝您的評論這可能是兩個不同的對象。但是,如果您注意到兩個Log.d中的inputStream對象都是相同的。就像調用兩個同一個對象的代碼一樣,你會得到兩個不同的答案。我不確定這是如何哈希代碼的作品。 – Sudhir

回答

1

的哈希碼的基本問題等於像上面的示例中,即使使用的inputStream對象相同,您也會發現第二個日誌哈希代碼與第一個日誌哈希代碼不同。

//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); 

雖然不回答上面的問題正是,但我可以通過不通過的哈希碼爲通用的圖像加載器ID來解決此問題。相反,我傳遞了獨特的文件ID,現在它運行良好,從內存緩存中顯示圖像。

相關問題