2011-07-26 2 views
0

URLから画像をギャラリービューに読み込みたいですか?androidビットマップキャッシング

私はまずこれを使ってビットマップにします。

URL aURL = new URL(myRemoteImages[position]); 
URLConnection conn = aURL.openConnection(); 
conn.setUseCaches(true); 
conn.connect(); 
Object response = conn.getContent(); 
if (response instanceof Bitmap) { 
    Bitmap bm = (Bitmap)response; 

    InputStream is = conn.getInputStream(); 
    /* Buffered is always good for a performance plus. */ 
    BufferedInputStream bis = new BufferedInputStream(is); 
    /* Decode url-data to a bitmap. */ 

    bm = BitmapFactory.decodeStream(bis); 
    bis.close(); 
    is.close(); 
    Log.v(imageUrl, "Retrieving image"); 

    /* Apply the Bitmap to the ImageView that will be returned. */ 
    i.setImageBitmap(bm); 

このビットマップをキャッシュする方法を教えてください。ユーザーが画面をスワイプすると、何度も何度も再ロードされません。

EDIT:getImage()を呼び出して、各URLのテキストURLを取得します。

私はこれらを両方ともasyncTaskで使用します。 preExecute私はgetImage()を呼び出す とdoInBackground私はimageAdapterにギャラリーを設定します。

private class MyTask extends AsyncTask<Void, Void, Void>{ 


       @Override 
       protected Void doInBackground(Void... arg0) {try { 
          getImages(); 
          Log.v("MyTask", "Image 1 retreived"); 
          getImage2(); 
          Log.v("MyTask", "Image 2 retreived"); 
          getImage3(); 
          Log.v("MyTask", "Image 3 retreived"); 
          getImage4(); 
          Log.v("MyTask", "Image 4 retreived"); 
         } catch (IOException e) { 
          Log.e("MainMenu retreive image", "Image Retreival failed"); 
          e.printStackTrace(); 
         } 
        return null; 
       } 
       @Override 

       protected void onPostExecute(Void notUsed){ 
        ((Gallery) findViewById(R.id.gallery)) 
          .setAdapter(new ImageAdapter(MainMenu.this)); 


       } 

         } 

EDIT:あなたがSDカードに、アプリケーションの起動時にあなたのイメージを保存することができ

public View getView(int position, View convertView, ViewGroup parent) { 
       ImageView i = new ImageView(this.myContext); 

       try { 

           URL aURL = new URL(myRemoteImages[position]); 
           URLConnection conn = aURL.openConnection(); 
           conn.setUseCaches(true); 
           conn.connect(); 
           Object response = conn.getContent(); 
           if (response instanceof Bitmap) { 
            Bitmap bm = (Bitmap)response; 

答えて

1

getViewメソッド()メソッドは、あなたはHashMap<String,Bitmap>を保持コンポーネントを初期化してマップを初期化する必要がありますSDCardからのフォルダの内容。

HashMapにはその画像のキーが含まれているかどうかまず確認します。たとえば、myMap.contains(myFileName)とし、マップから画像を取得するかどうか、画像が画像に含まれていないかどうかを確認します。マップをダウンロードし、SDCardにIDを格納し、マップに配置する必要があります。

これが最善の解決策であるかどうかはわかりません。多数のビットマップを持っている場合、アプリケーションのリソースが不足する可能性があるからです。また、私はBitmapの代わりにDrawableを格納することは、メモリ消費が少なくなると思います。

EDIT:問題が発生した場合、最初にオブジェクトを作成するときに、Drawableというメンバを持つカスタムクラスを作成し、URLConnectionを実行する必要があります。その後、getView()メソッドでは、myObj.getMyDrawable()を使用して、その特定のオブジェクトのドロウアブルにアクセスします。

+0

HmmmmイメージURLがimageUrl、imageUrl2などのように設定されていて、イメージを取り戻しています。これはイメージが毎月変更されるためです。 SDカードに保存するのは賢明な方法ではありません。たぶん、何をしようとしているのはまだアンドロイドでは不可能です。私はギャラリービューで自分のURLから画像を表示しようとしているので、ユーザーはそれらを見ることができます。 –

+0

Hm ...あなたの問題は、getView()メソッドでこのコードを実行し、getView()が呼び出されるたびにイメージがダウンロードされることだと思います。 –

+0

上記の私の編集を見てください。 getView()はどこでcalleDですか? –

関連する問題