2016-09-23 10 views
1

質問はUniversalImageLoaderにありませんが、コンテンツストリームを使用して画像を読み込もうとしているため、次の問題が発生しています。要求が同じでもJava InputSream hascodeは毎回異なります

ImageLoaderを使用できるように、入力ストリーム "stream://"を使用しています。同じリクエストの入力ストリームのハッシュコードが異なる方法で生成され、イメージロードを強制的にディスクの代わりにネットワークから再度ダウンロードすることを除いて、すべてが正常に機能しています。

修正するにはどうすればよいですか。

PS:私は(UtilityMethodだけで非同期タスクを注目している)のInputStreamが取得するhere

コードからの回答を追跡しようとした:

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

ストリームを開いて、私が見る限りではhashValueを比較しています。ストリームハッシュの契約をIDKしますが、通常のオブジェクトの場合は、そのアドレスです。新しいストリーム=新しいオブジェクト=新しいアドレス。私の理論が正しければ、それらをhashCodeで比較することはできません。ネットワークイメージのmd5とローカルコピーmd5を比較できるように、独自の比較方法を作成するか、イメージのmd5を先に送信する必要があります。 – HopefullyHelpful

+0

@HopefullyHelpfulありがとうございました。これは、2つの異なるオブジェクトに当てはまる可能性があります。しかし、両方のLogDのinputStreamオブジェクトが同じであることに気づいた場合。同じオブジェクトの2つのコードを次々と呼び出すようなもので、2つの異なる答えが得られます。これがハッシュコードの仕組みであるかどうかは分かりません。 – Sudhir

答えて

1

のようなハッシュコードの基本的な問題は等しいです上記のサンプルでは、​​使用されるinputStreamオブジェクトが同じ場合でも、2番目のログハッシュコードが最初のログハッシュコードと異なることがわかります。

//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を渡し、メモリキャッシュから画像を表示するのにうまくいきました。

関連する問題