質問は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);
}
}
});
}
イメージストリームをどのように取得できますか?どこから? – NOSTRA
ストリームを開いて、私が見る限りではhashValueを比較しています。ストリームハッシュの契約をIDKしますが、通常のオブジェクトの場合は、そのアドレスです。新しいストリーム=新しいオブジェクト=新しいアドレス。私の理論が正しければ、それらをhashCodeで比較することはできません。ネットワークイメージのmd5とローカルコピーmd5を比較できるように、独自の比較方法を作成するか、イメージのmd5を先に送信する必要があります。 – HopefullyHelpful
@HopefullyHelpfulありがとうございました。これは、2つの異なるオブジェクトに当てはまる可能性があります。しかし、両方のLogDのinputStreamオブジェクトが同じであることに気づいた場合。同じオブジェクトの2つのコードを次々と呼び出すようなもので、2つの異なる答えが得られます。これがハッシュコードの仕組みであるかどうかは分かりません。 – Sudhir