3
私は画像URL
でRealmデータベースを持っており、これらの画像をExternalCacheDir
にダウンロードする必要があります。ここに問題があります。私は3つの画像があると仮定します:ar11.jpg
、ar12.jpg
、ar13.jpg
。私のコードが実行されると、上記の名前でキャッシュディレクトリに3つのjpgイメージが得られますが、最後のイメージの複製はすべてar11
、ar12
、ar13
のar13.jpg
です。ここでPicassoを使用して画像をダウンロードすると、キャッシュに不正な画像が作成される可能性がありますか?
は私のコードです:
private void downloadImage()
{
RealmResults<ARDatabase> results = mRealm.where(ARDatabase.class).findAll();
for(ARDatabase x:results)
{
if(!x.getIsDownloaded())
{
mdataCollection.add(new DownLoadList(x.getUrlImg(),x.getUid()));
}
}
for(DownLoadList i:mdataCollection)
{
Log.e("Link",""+i.getImageUrl());
Picasso.with(getApplicationContext()).load(i.getImageUrl()).into(target);
}
}
private Target target = new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from)
{
Log.e("PICASSO","SUCCESSFUL");
new Thread(new Runnable() {
@Override
public void run() {
File sd = getExternalCacheDir();
File folder = new File(sd, "/arproject/");
if (!folder.exists()) {
if (!folder.mkdir()) {
Log.e("ERROR", "Cannot create a directory!");
} else {
folder.mkdirs();
}
}
//File[] fileName = {new File(folder, "one.jpg"), new File(folder, "two.jpg")};
for (DownLoadList i:mdataCollection)
{
File fileName = new File(folder,i.getUid().toLowerCase()+".jpg");
if (!fileName.exists()) {
try {
fileName.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
try {
FileOutputStream outputStream = new FileOutputStream(String.valueOf(fileName));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable)
{
Log.e("PICASSO","FAILED"+errorDrawable.toString());
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
おそらく、この冗長性を引き起こし、そしてどのようにそれを修正することですか?
@superman: 次に同じことが、このコードを試してみてください
ar12.jpg
とar13.jpg
とどうなりますか?はいの場合は、それを受け入れてください。 – Sangharsh