即使请求相同,Java InputSream hascode也是不同的

时间:2016-09-23 06:46:08

标签: android inputstream universal-image-loader

我的查询不是UniversalImageLoader,而是因为我正在尝试使用内容流来加载我面临的问题。

我正在使用输入流" stream://"能够使用ImageLoader。一切正常,但同一请求的输入流的哈希码生成方式不同,因此迫使图像加载器再次从网络而不是磁盘下载图像。

我该怎么做才能解决它。

PS:我试图按照here

的回答

获取InputStream的代码是(The 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);
            }
        }
    });
}

1 个答案:

答案 0 :(得分: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,现在它可以很好地显示内存缓存中的图像。