2016-09-23 30 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,现在它运行良好,从内存缓存中显示图像。

相关问题