¿Cómo almacenar imágenes recuperadas de url en una base de datos SQLite?

Estoy recuperando imágenes de una url. En lugar de almacenar en caché las imágenes, ¿sería posible almacenarlas en una base de datos SQLite?

/** Simple Constructor saving the 'parent' context. */ public ImageAdapter(Context c) { this.myContext = c; } /** Returns the amount of images we have defined. */ public int getCount() { return this.myRemoteImages.length; } /* Use the array-Positions as unique IDs */ public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } /** Returns a new ImageView to * be displayed, depending on * the position passed. */ 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.connect(); InputStream is = conn.getInputStream(); /* Buffered is always good for a performance plus. */ BufferedInputStream bis = new BufferedInputStream(is); /* Decode url-data to a bitmap. */ 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); } catch (IOException e) { Log.e("DEBUGTAG", "Remtoe Image Exception", e); } /* Image should be scaled as width/height are set. */ i.setScaleType(ImageView.ScaleType.FIT_CENTER); /* Set the Width/Height of the ImageView. */ if(Build.VERSION.SDK_INT >= 11){ i.setLayoutParams(new Gallery.LayoutParams(450, 300)); return i; } else{ i.setLayoutParams(new Gallery.LayoutParams(125, 125)); return i; } } /** Returns the size (0.0f to 1.0f) of the views * depending on the 'offset' to the center. */ public float getScale(boolean focused, int offset) { /* Formula: 1 / (2 ^ offset) */ return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset))); } } 

EDITAR: configura el imageAdapter para cargar imágenes en la Galería

 ((Gallery) findViewById(R.id.gallery)) .setAdapter(new ImageAdapter(MainMenu.this)); 

 protected Drawable Imagehandler(String url) { try { url=url.replaceAll(" ", "%20"); InputStream is = (InputStream)this.fetch(url); Drawable d = Drawable.createFromStream(is, "src"); return d; } catch (MalformedURLException e) { System.out.println(url); System.out.println("error at URI"+e); return null; } catch (IOException e) { System.out.println("io exception: "+e); System.out.println("Image NOT FOUND"); return null; } } protected Object fetch(String address) throws MalformedURLException,IOException { URL url = new URL(address); Object content = url.getContent(); return content; } 

esto convertirá tu imageUrl a Drawble en tiempo de ejecución, luego configura Drawble a Imageview de Gallery

Ya puede almacenar la imagen como BLOB en su base de datos,

 public static byte[] urlToImageBLOB(String url) throws IOException { httpclient = new DefaultHttpClient(); entity = null; httpGet = new HttpGet(url); response = httpclient.execute(httpGet); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { entity = response.getEntity(); } return EntityUtils.toByteArray(entity); } 

Para buscar

 public static Bitmap getImageFromBLOB(byte[] mBlob) { byte[] bb = mBlob; return BitmapFactory.decodeByteArray(bb, 0, bb.length); } 

// para establecer imageView.setImageBitmap(getImageFromBLOB(cursor.getBlob(object.getColumnIndex("book_thumb"))));

Aquí hay un enlace a cómo almacenar datos en el almacenamiento externo: Almacenamiento externo

El enlace explica dónde colocar los archivos (si desea usar almacenamiento externo) y cómo verificar si el almacenamiento externo está disponible.

Editar: cómo se accede a los archivos, se explica bajo el tema “Acceso a archivos en el almacenamiento externo”.

En API 8, o superior, debe invocar getExternalFilesDir() para obtener un File que represente el directorio raíz de sus aplicaciones. A continuación, puede leer y escribir los archivos como lo hace normalmente (utilizando, por ejemplo, FileWriter y FileReader para datos de texto)