2014-02-21 97 views
0

我已经从URL中检索图像。我想将这个图像插入到SQLite数据库中。 我试过在编码后插入它,但是一个sting值正在被存储。任何人都可以建议如何插入图片到SQLite数据库。这里是我的代码:如何在android中插入图像到sqlite数据库?

Login.java

final String t1=user.getId(); 
final String t2=user.getName(); 
AsyncTask<Void, Void, Bitmap> t = new AsyncTask<Void, Void, Bitmap>(){ 

@Override 
    protected Bitmap doInBackground(Void... arg0) { 
     // TODO Auto-generated method stub 
      Bitmap bm = null; 
        try { 
        URL aURL = new URL("http://graph.facebook.com/"+t1+"/picture?type=small"); 
        URLConnection conn = aURL.openConnection(); 
        conn.setUseCaches(true); 
        conn.connect(); 
        InputStream is = conn.getInputStream(); 
        BufferedInputStream bis = new BufferedInputStream(is); 
        bm = BitmapFactory.decodeStream(bis); 

        bis.close(); 
        is.close(); 
         } 
           catch (IOException e) { 
          e.printStackTrace(); 
         } 
         return bm; 
        } 
        protected void onPostExecute(Bitmap bm){ 
         //Drawable drawable = new BitmapDrawable(getResources(), bm); 
         Bitmap b1=bm; 
         ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
         b1.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
         byte[] b = baos.toByteArray(); 
         // Log.w("bit",""+drawable); 
         String encodedImage = Base64.encodeToString(b,Base64.DEFAULT); 
         fbdetails.put("fbname",t2); 
         fbdetails.put("fbuserid",t1); 
         fbdetails.put("fbpic",encodedImage); 
         db.insertme(fbdetails); 
        } 
       }; 
       t.execute(); 
      } 
     }); 

Databasehandler.java

public void insertme(HashMap<String, String> queryValues) { 
    SQLiteDatabase database = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put("fbname", queryValues.get("fbname")); 
    values.put("fbuserid", queryValues.get("fbuserid")); 
    values.put("fbpic", queryValues.get("fbpic")); 

    database.insert("me", null, values); 
    database.close(); 
} 
+0

检查这些链接,螨是有帮助的。在V http://stackoverflow.com/questions/17448405/save-image-in-sqlite-数据库从服务器的URL http://stackoverflow.com/questions/18798189/adding-image-to-android-sqlite-database http://stackoverflow.com/questions/17482575/保存图像 - 从-URL-TO- sqlite数据库 –

回答

1

把图像中的数据库做东西 - 你的方式膨胀数据库b并从中获取数据,然后需要将其转换为正确的格式。相反,将其存储到磁盘* (SDCARD) *并将文件名存储到数据库中。然后从SDCARD加载它。

+0

祝贺..保持去 – user3256145

+0

请接受答案。 –

+0

根据Richard Hipp,SQLite架构师和主要开发人员,将图像放入数据库是一种很好的做事方式http://sqlite.1065341.n5.blebs.com/store-image-file-as-blob -tp71972p71994.html –

1

您应该查找BLOB类型信息,这是将图像存储在数据库中的唯一方法。但是你需要首先转换你的位图。

0

必须的base64编码字符串VIST [http://developer.android.com/reference/android/util/Base64.html]

0

您应该只插入数据库中的图像的路径。

String path = Images.Media.insertImage(context.getContentResolver(), bm, "YourTitle", null); 

和接入路径字符串...

0
public class ImageManipulation { 

public static String encodeImage(byte[] imageByteArray) { 
return Base64.encodeToString(imageByteArray, 0); 
} 

public static byte[] decodeImage(String imageDataString) { 
return Base64.decode(imageDataString, 0); 
} 

public static Drawable getDrawableFromString(String imageString) { 
byte[] imageBytes = decodeImage(imageString); 
Drawable image = null; 
image = new BitmapDrawable(BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length)); 

return image; 

} 

}

您可以使用上面的Util类。

0
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 

public class MyDataBase extends SQLiteOpenHelper{ 

    public MyDataBase(Context context, String dbname, CursorFactory factory, int dbversion) { 
     super(context, dbname, factory, dbversion); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table tableimage(image blob);"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

} 


======================================== 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener{ 

    private ImageView imageview=null; 
    private Button btninsert=null; 
    private Button btnretrive=null; 
    private MyDataBase mdb=null; 
    private SQLiteDatabase db=null; 
    private Cursor c=null; 
    private byte[] img=null; 
    private static final String DATABASE_NAME = "ImageDb.db"; 
    public static final int DATABASE_VERSION = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btninsert=(Button)findViewById(R.id.button_insert); 
     btnretrive= (Button)findViewById(R.id.button_retrieve); 
     imageview= (ImageView)findViewById(R.id.imageView_image); 
     imageview.setImageResource(0); 
     btninsert.setOnClickListener(this); 
     btnretrive.setOnClickListener(this); 
     mdb=new MyDataBase(getApplicationContext(), DATABASE_NAME,null, DATABASE_VERSION); 


     Bitmap b=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
     b.compress(Bitmap.CompressFormat.PNG, 100, bos); 
     img=bos.toByteArray(); 
     db=mdb.getWritableDatabase(); 
    } 
    @Override 
    public void onClick(View arg0) { 

     if(btninsert==arg0) 
     { 
      ContentValues cv=new ContentValues(); 
      cv.put("image", img); 
      db.insert("tableimage", null, cv); 
      Toast.makeText(this, "inserted successfully", Toast.LENGTH_SHORT).show(); 
     } 
     else if(btnretrive==arg0) 
     { 
       String[] col={"image"}; 
       c=db.query("tableimage", col, null, null, null, null, null); 

       if(c!=null){ 
        c.moveToFirst(); 
        do{ 
         img=c.getBlob(c.getColumnIndex("image")); 
         }while(c.moveToNext()); 
       } 
       Bitmap b1=BitmapFactory.decodeByteArray(img, 0, img.length); 

       imageview.setImageBitmap(b1); 
       Toast.makeText(this, "Retrive successfully", Toast.LENGTH_SHORT).show(); 
      } 
     } 

} 

你可以使用上面的代码..

相关问题