1

ListView에있는 galleryViews에 이미지를 표시하려고합니다. 서버에서 SDCard로 이미지를 다운로드 한 다음 표시합니다. 이미지가 없으면 캐시에서 이미지를 확인한 다음 sdcard에서 이미지를로드합니다. 사용자가 텍스트와 활동을 보여주는 평균 시간 스피에 sdcard에하는 내가 서버에서 이미지를 다운로드하고 저장하고 처음으로 응용 프로그램을 시작Async SDCard의 Listview 갤러리보기에서 이미지로드

이미지에없는 경우 내가 원하는

sdcard 이미지를 다운로드 한 후 이미지를 다운로드하자 마자 바로 이미지를 표시해야합니다.

public class AsyncImageLoader { 
    private boolean isImageView; 
    private final LinkedHashMap<String, Bitmap> cache = 
     new LinkedHashMap<String, Bitmap>(60, (float) 1.0, true); 


Handler handler = new Handler() { 

@Override 
public void handleMessage(Message msg) { 
    super.handleMessage(msg); 

    LoadImageFromSdCard loadImage = (LoadImageFromSdCard) msg.obj; 
    if (isImageView) { 
    loadImage.imageView.setImage(loadImage.bmp); 
    } else { 
    Thread thread = new Thread(new LoadImageFromSdCard(loadImage.uri, loadImage.imageView)); 
    try { 
     Log.i("AsyncImageLoader", "SECOND THREAD STARTED"); 
     Thread.sleep(10000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    thread.start(); 
    } 
    } 
}; 


public Bitmap loadImage(String uri, 
    ImageTextComboControl imageView) { 
if (cache.containsKey(uri)) { 
    return cache.get(uri); 
} else { 
    handler.post(new LoadImageFromSdCard(uri, imageView)); 
} 

return null; 
} 

private class LoadImageFromSdCard implements Runnable { 

String uri;  
ImageTextComboControl imageView; 
ImageView image; 
Bitmap bmp = null; 

public LoadImageFromSdCard(String uri, ImageTextComboControl imageView) { 
    this.uri = uri; 
    this.imageView = imageView; 
} 

public void run() { 
    FileInputStream fis; 
    try { 
    fis = new FileInputStream(new File(uri)); 
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    return; 
    } 
    bmp = BitmapFactory.decodeStream(fis); 
    if (imageView != null) { 
    isImageView = true; 
    cache.put(uri, bmp); 
    Message message = new Message(); 
    message.obj = this; 
    handler.sendMessage(message); 
    } 

    } 
} 
} 

고맙습니다

답변

1

큰 비트 맵에 대해 조심하고, 중요한 (AsyncTask를 섹션을 사용하여) 더 나은 사용 비동기 작업 클래스 http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html인가 어댑터의 onContentChanged() 메소드. sdCard에 이미지를 저장하고 sdCard 경로를 sqlite 데이터베이스에 저장하면 sqlite 데이터베이스에서 데이터가 변경 될 때 커서 어댑터를 사용하기 때문에 onContentChanged 메서드가 호출됩니다.

+0

와우 확실한 자신의 매우 유용한 정보 덕분에 aloooooooooot. – raju

1

, 나는 사용하여 내 문제를 해결

http://developer.android.com/training/displaying-bitmaps/index.html

+0

내 문제는 이미지가 다운로드되는 즉시 이미지가 별도의 스레드에서 sdcard로 다운로드된다는 것입니다. 이미지보기에서 sdcard로 표시하고 싶습니다. –

+0

답변 해드립니다. 비동기 작업 설명서를 참조하십시오. 메인 스레드가 실행될 때 UIThread에서 실행되는 메소드 인 onPostExecute가 있습니다. doInBackground, finish. 답이 맞다면 투표하십시오;) – Aracem

+0

덕분에 어댑터에서 onContentChanged() 메서드를 사용하여 문제를 해결했습니다. 그러나 당신의 제안은 이미지를 이해하고 다루는 데 많은 도움을주었습니다. –

관련 문제