Ich möchte ein Bild (von der URL) in einer SQLite-Datenbank speichern.
Dafür benutze ich:
db = new DataBase(getApplicationContext());
URL url = new URL("http://sree.cc/wp-content/uploads/schogini_team.png");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is,128);
ByteArrayBuffer barb= new ByteArrayBuffer(128);
int current = 0;
while ((current = bis.read()) != -1) {
barb.append((byte) current);
}
ContentValues filedata= new ContentValues();
filedata.put(DataBase.IMG_SRC,barb.toByteArray());
db.insert(DataBase.Table_Img, null, filedata);
In der Insert()
:
public void insert(String tableImg, Object object,
ContentValues dataToInsert) {
// TODO Auto-generated method stub
String sql = "INSERT INTO "+tableImg+" ("+ID+","+IMG_SRC+") " +
"VALUES ('"+1+"','"+dataToInsert+"')";
db.execSQL(sql);
}
Zum Abrufen von Bildern:
Cursor cursor = db.selectDataToShow(DataBase.Table_Img, DataBase.IMG_SRC);
byte[] imageByteArray=cursor.getBlob(cursor.getColumnIndex(DataBase.IMG_SRC));
cursor.close();
ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
System.out.println(">>>>>>>>>>>>>>>>>>>>>> "+theImage);
Also hier habe ich null
.
Und in meiner Datenbank wird der Wert des Bildes gespeichert als: Image=[B@43e5ac48]
Antworten:
Hier der Code, den ich für meine App verwendet habe
Dieser Code nimmt ein Bild von der URL und konvertiert es in ein Byte-Array
byte[] logoImage = getLogoImage(IMAGEURL); private byte[] getLogoImage(String url){ try { URL imageUrl = new URL(url); URLConnection ucon = imageUrl.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(500); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } return baf.toByteArray(); } catch (Exception e) { Log.d("ImageManager", "Error: " + e.toString()); } return null; }
Um das Bild in db zu speichern, habe ich diesen Code verwendet.
public void insertUser(){ SQLiteDatabase db = dbHelper.getWritableDatabase(); String delSql = "DELETE FROM ACCOUNTS"; SQLiteStatement delStmt = db.compileStatement(delSql); delStmt.execute(); String sql = "INSERT INTO ACCOUNTS (account_id,account_name,account_image) VALUES(?,?,?)"; SQLiteStatement insertStmt = db.compileStatement(sql); insertStmt.clearBindings(); insertStmt.bindString(1, Integer.toString(this.accId)); insertStmt.bindString(2,this.accName); insertStmt.bindBlob(3, this.accImage); insertStmt.executeInsert(); db.close(); }
Um das Bild wieder abzurufen, ist dies der Code, den ich verwendet habe.
public Account getCurrentAccount() { SQLiteDatabase db = dbHelper.getWritableDatabase(); String sql = "SELECT * FROM ACCOUNTS"; Cursor cursor = db.rawQuery(sql, new String[] {}); if(cursor.moveToFirst()){ this.accId = cursor.getInt(0); this.accName = cursor.getString(1); this.accImage = cursor.getBlob(2); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } db.close(); if(cursor.getCount() == 0){ return null; } else { return this; } }
Zum Schluss laden Sie dieses Bild in eine Bildansicht
logoImage.setImageBitmap(BitmapFactory.decodeByteArray( currentAccount.accImage, 0,currentAccount.accImage.length));
quelle
Deklarieren Sie in der DBAdaper-Datenbank-Helferklasse die Tabelle wie folgt
private static final String USERDETAILS= "create table userdetails(usersno integer primary key autoincrement,userid text not null ,username text not null,password text not null,photo BLOB,visibility text not null);";
Fügen Sie die Werte wie folgt ein:
konvertiere zuerst die Bilder als Byte []
ByteArrayOutputStream baos = new ByteArrayOutputStream(); Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.common)).getBitmap(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] photo = baos.toByteArray(); db.insertUserDetails(value1,value2, value3, photo,value2);
in der DEAdaper-Klasse
public long insertUserDetails(String uname,String userid, String pass, byte[] photo,String visibility) { ContentValues initialValues = new ContentValues(); initialValues.put("username", uname); initialValues.put("userid",userid); initialValues.put("password", pass); initialValues.put("photo",photo); initialValues.put("visibility",visibility); return db.insert("userdetails", null, initialValues); }
Rufen Sie das Bild wie folgt ab
Cursor cur=your query; while(cur.moveToNext()) { byte[] photo=cur.getBlob(index of blob cloumn); }
Konvertieren Sie das Byte [] in ein Bild
Ich denke, dieser Inhalt kann Ihr Problem lösen
quelle
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
? Was ist mit Ich möchte mein Bild nicht komprimieren?In insert ()
public void insert(String tableImg, Object object, ContentValues dataToInsert) { db.insert(tablename, null, dataToInsert); }
Hoffe es hilft dir.
quelle
für ein ionisches Projekt
Und jetzt setzen wir imgBBDD in SqlLite
Eine serverseitige (PHP)
quelle
byte[] byteArray = rs.getBytes("columnname"); Bitmap bm = BitmapFactory.decodeByteArray(byteArray, 0 ,byteArray.length);
quelle
Möglicherweise möchten Sie auch zu / von base64 codieren und decodieren
function uncompress(str:String):ByteArray { import mx.utils.Base64Decoder; var dec:Base64Decoder = new Base64Decoder(); dec.decode(str); var newByteArr:ByteArray=dec.toByteArray(); return newByteArr; } // Compress a ByteArray into a Base64 String. function compress(bytes:ByteArray):String { import mx.utils.Base64Decoder; //Transform String in a ByteArray. import mx.utils.Base64Encoder; //Transform ByteArray in a readable string. var enc:Base64Encoder = new Base64Encoder(); enc.encodeBytes(bytes); return enc.drain().split("\n").join(""); }
quelle