2011-07-25 150 views
4

我從網址中檢索圖像。 而不是緩存圖像,它有可能將其存儲在SQLite數據庫中嗎?如何將從URL中檢索的圖像存儲在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))); 
       } 
       } 

編輯:設置imageAdapter在庫加載圖像

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

爲什麼不把它們存儲在SD卡上? – Kaj

+0

你能提供一個來自我上面的代碼的例子嗎?或者你知道的教程。謝謝 – yoshi24

回答

8
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; 
    } 

這將轉換您的IMAGEURL在運行時Drawble,然後設置Drawble到畫廊的ImageView

+0

那麼這個問題如何與我的代碼整合?我會替換擴展基礎適配器的imageLoader嗎? – yoshi24

5

雅您可以存儲圖像數據庫中的BLOB,

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); 
    } 

要提取

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

    } 

//設置imageView.setImageBitmap(getImageFromBLOB(cursor.getBlob(object.getColumnIndex("book_thumb"))));

+0

那麼這個實體會被保存在數據庫中嗎?我貼了代碼即時通訊用於檢索上面的圖像。 – yoshi24

+1

不,您必須在此處將字段視爲Blob(book_thumb) ContentValues value = new ContentValues(); value.put(「book_thumb」,urlToImageBLOB(url)); db.insertOrThrow(Table_name,null,value); 這會將您的圖像保存爲數據庫BLOB –

+0

我將如何解決它?或者像Kaj在評論abov上說的那樣將它保存到SD卡上會更好嗎? – yoshi24

4

這裏是你如何存儲在外部存儲數據的鏈接:External storage

鏈接說明在何處放置文件(如果你想使用外部存儲器),以及如何檢查,如果外部存儲可用。

編輯:您如何訪問文件,在「訪問外部存儲上的文件」主題下進行了說明。

您應該在API 8或更高版本中調用getExternalFilesDir()以獲得代表您的應用程序根目錄的File。然後,您可以讀取和寫入文件,與平時一樣(例如使用的FileWriter和的FileReader爲文本數據)

+0

鏈接不告訴你如何保存到SD卡。只是檢查可用性? – yoshi24

+1

我更新了我的答案。 – Kaj

相關問題