AQuery을 사용하여 일부 이미지를 캐시하는 데 도움이됩니다. 사실 이미지가 올바르게 캐싱되고 있음을 알고 있지만 온라인 상태가 아니면 이미지에 액세스하는 데 문제가 있습니다.오프라인 상태에서 캐시 된 이미지에 올바르게 액세스 할 수 없습니다.
내 SD 카드에서 볼 수 있기 때문에 캐시되고 있다는 것을 알고 있습니다. 브라우저 (복사/붙여 넣기)의 URL로 내 return 문을 mArtistImageURL
으로 바꾸면 이미지가 오프라인 일 때로드됩니다. 이미 캐시 된 경우. 온라인 상태 일 때만 이미지 URL을 가져 오라고 요청하고 있지만 캐시 된 이미지가 오프라인으로로드되지 않는 이유는 모르겠다.
MusicUtils.isOnline()
기본적으로 어떤 연결이 있는지 확인합니다. 가장 큰 이유는 내 doInBackground()
메서드의 포장이 예외가 던져 예외가 할 경우 않습니다. FATAL EXCEPTION: AsyncTask #1
는 모두 Logcat이 나에게 내놓은 순간입니다. stacktrace가 완료되지 않은 이유는 확실하지 않습니다.
제가 알고있는 모든면에서 AsyncTask
을 사용해 보았습니다. Bitmap
, File
및 String
을 반환했으며 온라인 상태에서 각 이미지를 성공적으로로드 할 수 있습니다. 따라서 캐시 된 이미지가 있으며 사용하도록 도움이 필요합니다.
AsyncTask를
public class loadArtistImage extends AsyncTask<String, Integer, Bitmap> {
@Override
protected Bitmap doInBackground(String... arg0) {
// Get artist image
if (MusicUtils.isOnline(mContext)) {
mArtistResults = Artist.getImages("Andrew Bird", 1, 1, key);
mArtistIterator = mArtistResults.getPageResults().iterator();
while (mArtistIterator.hasNext()) {
mArtistImageURL = mArtistIterator.next().getImageURL(
ImageSize.ORIGINAL);
}
}
aq.cache(mArtistImageURL, 60000 * 1440);
return aq.getCachedImage(mArtistImageURL);
}
@Override
protected void onPostExecute(Bitmap result) {
bm = result;
if (bm!= null) {
mArtistImage.postDelayed(new Runnable() {
@Override
public void run() {
mArtistImage.startAnimation(AnimationUtils
.loadAnimation(mContext, android.R.anim.fade_in));
MusicUtils.setArtistBackground(mArtistImage, bm);
}
}, 666);
} else {
// TODO something
}
super.onPostExecute(result);
}
}
그래, 나는 이것을 깨닫는다, 네 말이 맞아. 문제는 이것에 대해 어떻게 생각해야할지 모르겠습니다. 오프라인 일 때 URL 값을 유지하는 방법을 생각할 수 없습니다. 'SharedPreferences'를 시도했지만 결코 작동하지 않았습니다. 내가 오프라인 일 때 이미지 URL을 가져 오는 데 사용하는 메서드에 의해 throw 된 Exception을 잡아야합니다. 그렇지 않으면 강제로 닫힙니다. 조언 있니? – adneal
아티스트마다 1 개의 이미지가 있습니다. 맞습니까? – Sver
당신이 말하는 것을 이해하고 있지만, 처음에 그것을 잡으려면 온라인에 있어야 할 때'getImageUrlOrFilenameWhileOffline()', 어떤 메소드가 올바른 이미지 URL을 반환 할 수 있습니까? – adneal