android - Error when trying to retrieve BLOB image from database -


i didn't receive responses on first question similar one, i'm going try again explain better understand.

i trying retrieve image database stored blob image pulled through simplecursoradapter. can store image fine, when try , retrieve image gives me error "unable convert blob string". i'm not sure why error i'm not trying convert blob directly string.

i'm new android programming take as can get.

thank time.

stacktrace

  04-06 14:34:00.163    4145-4145/com.gnumbu.errolgreen.importedapplication e/androidruntime﹕ fatal exception: main process: com.gnumbu.errolgreen.importedapplication, pid: 4145 android.database.sqlite.sqliteexception: unknown error (code 0): unable convert blob string         @ android.database.cursorwindow.nativegetstring(native method)         @ android.database.cursorwindow.getstring(cursorwindow.java:438)         @ android.database.abstractwindowedcursor.getstring(abstractwindowedcursor.java:51)         @ android.widget.simplecursoradapter.bindview(simplecursoradapter.java:150)         @ android.widget.cursoradapter.getview(cursoradapter.java:254)         @ android.widget.abslistview.obtainview(abslistview.java:2344)         @ android.widget.listview.measureheightofchildren(listview.java:1270)         @ android.widget.listview.onmeasure(listview.java:1182)         @ android.view.view.measure(view.java:17430)         @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5463)         @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1436)         @ android.widget.linearlayout.measurevertical(linearlayout.java:722)         @ android.widget.linearlayout.onmeasure(linearlayout.java:613)         @ android.view.view.measure(view.java:17430)         @ android.support.v4.view.viewpager.onmeasure(viewpager.java:1456)         @ android.view.view.measure(view.java:17430)         @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5463)         @ android.widget.framelayout.onmeasure(framelayout.java:430)         @ android.view.view.measure(view.java:17430)         @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5463)         @ android.support.v7.internal.widget.actionbaroverlaylayout.onmeasure(actionbaroverlaylayout.java:453)         @ android.view.view.measure(view.java:17430)         @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5463)         @ android.widget.framelayout.onmeasure(framelayout.java:430)         @ android.view.view.measure(view.java:17430)         @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5463)         @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1436)         @ android.widget.linearlayout.measurevertical(linearlayout.java:722)         @ android.widget.linearlayout.onmeasure(linearlayout.java:613)         @ android.view.view.measure(view.java:17430)         @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5463)         @ android.widget.framelayout.onmeasure(framelayout.java:430)         @ com.android.internal.policy.impl.phonewindow$decorview.onmeasure(phonewindow.java:2560)         @ android.view.view.measure(view.java:17430)         @ android.view.viewrootimpl.performmeasure(viewrootimpl.java:2001)         @ android.view.viewrootimpl.measurehierarchy(viewrootimpl.java:1166)         @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1372)         @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1054)         @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:5779)         @ android.view.choreographer$callbackrecord.run(choreographer.java:767)         @ android.view.choreographer.docallbacks(choreographer.java:580)         @ android.view.choreographer.doframe(choreographer.java:550)         @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:753)         @ android.os.handler.handlecallback(handler.java:739)         @ android.os.handler.dispatchmessage(handler.java:95)         @ android.os.looper.loop(looper.java:135)         @ android.app.activitythread.main(activitythread.java:5221)         @ java.lang.reflect.method.invoke(native method)         @ java.lang.reflect.method.invoke(method.java:372)         @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:899)         @ com.android.internal.os.zygoteinit.main(zygoteinit.java:694) 

dbadapter.java

public class dbadapter {

private static final string tag = "dbadapter"; //used logging database version changes  // field names: public static final string key_rowid = "_id"; public static final string key_task = "task"; public static final string key_date = "date"; public static final string key_image = "image";  public static final string[] all_keys = new string[] {key_rowid, key_task, key_date, key_image};  // column numbers each field name: public static final int col_rowid = 0; public static final int col_task = 1; public static final int col_date = 2; public static final int col_image = 3;  // database info: public static final string database_name = "dbtodo"; public static final string database_table = "maintodo"; public static final int database_version = 1; // version number must incremented each time change db structure occurs.  //sql statement create database private static final string database_create_sql =          "create table " + database_table          + " (" + key_rowid + " integer primary key autoincrement, "         + key_task + " text not null, "         + key_date + " text"         + key_image + " blob"         + ");";   private final context context; private databasehelper mydbhelper; private sqlitedatabase db;   public dbadapter(context ctx) {     this.context = ctx;     mydbhelper = new databasehelper(context); }  // open database connection. public dbadapter open() {     db = mydbhelper.getwritabledatabase();     return this; }  // close database connection. public void close() {     mydbhelper.close(); }  // add new set of values inserted database. public long insertrow(string task, string date, byte[] image ) {     contentvalues initialvalues = new contentvalues();     initialvalues.put(key_task, task);     initialvalues.put(key_date, date);     initialvalues.put(key_image, image);       // insert data database.     return db.insert(database_table, null, initialvalues); }  // delete row database, rowid (primary key) public boolean deleterow(long rowid) {     string = key_rowid + "=" + rowid;     return db.delete(database_table, where, null) != 0; }  public void deleteall() {     cursor c = getallrows();     long rowid = c.getcolumnindexorthrow(key_rowid);     if (c.movetofirst()) {         {             deleterow(c.getlong((int) rowid));                       } while (c.movetonext());     }     c.close(); }  // return data in database. public cursor getallrows() {     string = null;     cursor c =  db.query(true, database_table, all_keys, where, null, null, null, null, null);     if (c != null) {         c.movetofirst();     }     return c; }  // specific row (by rowid) public cursor getrow(long rowid) {     string = key_rowid + "=" + rowid;     cursor c =  db.query(true, database_table, all_keys,                      where, null, null, null, null, null);     if (c != null) {         c.movetofirst();     }     return c; }  // change existing row equal new data. public boolean updaterow(long rowid, string task, string date, byte[] image) {     string = key_rowid + "=" + rowid;     contentvalues newvalues = new contentvalues();     newvalues.put(key_task, task);     newvalues.put(key_date, date);     newvalues.put(key_image, image);     // insert database.     return db.update(database_table, newvalues, where, null) != 0; }   private static class databasehelper extends sqliteopenhelper {     databasehelper(context context) {         super(context, database_name, null, database_version);     }      @override     public void oncreate(sqlitedatabase _db) {         _db.execsql(database_create_sql);                }      @override     public void onupgrade(sqlitedatabase _db, int oldversion, int newversion) {         log.w(tag, "upgrading application's database version " + oldversion                 + " " + newversion + ", destroy old data!");          // destroy old database:         _db.execsql("drop table if exists " + database_table);          // recreate new database:         oncreate(_db);     } } 

}

peekfragment.java

public class peekfragment extends fragment implements view.onclicklistener {       //delcare public variables !     time today = new time(time.getcurrenttimezone());     dbadapter mydb;     edittext ettasks;     imageview img;     bytearraybuffer baf ;     imageview dbimage ;         public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         view v = inflater.inflate(r.layout.other_layout, container, false);         button = (button) v.findviewbyid(r.id.addtask);         button b = (button) v.findviewbyid(r.id.deletebutton);         a.setonclicklistener(this);         b.setonclicklistener(this);          return v;     }      @override     public void onclick(view v) {         switch (v.getid()) {             case r.id.addtask:                  today.settonow();                 string timestamp = today.format("%y-%-m-%d %h:%m:%s");                  if (!textutils.isempty(ettasks.gettext().tostring())) {                      dbimage.builddrawingcache();//draws image bitmap                     bitmap bmap = dbimage.getdrawingcache();                      mydb.insertrow(ettasks.gettext().tostring(), timestamp, getbytes(bmap));                  }                 break;             case r.id.deletebutton:                 mydb.deleteall();                 break;         }         populatelistview();     }        public void onactivitycreated(bundle savedinstancestate) {         super.onactivitycreated(savedinstancestate);         ettasks = (edittext) getview().findviewbyid(r.id.edittexttask);         dbimage = (imageview) getview().findviewbyid(r.id.dbimageupload);         opendb();        // new task_like_flag().execute();        // img =(imageview) getview().findviewbyid(r.id.imageviewpicture);         populatelistview();         listviewitemclick();         listviewitemlongclick();          cursor cursor = mydb.getallrows();          string[] fromfieldnames = new string[]{dbadapter.key_rowid, dbadapter.key_task, dbadapter.key_image};         int[] toviewids = new int[]{r.id.idview, r.id.resourceview, r.id.imageviewpicture};         simplecursoradapter mycursoradapter;         mycursoradapter = new simplecursoradapter(getactivity(), r.layout.tobedeletedd_view, cursor, fromfieldnames, toviewids, 0) {         };         listview mylist = (listview) getview().findviewbyid(r.id.listview);          mylist.setadapter(mycursoradapter);      }      /**      * public void onclick_addtask(view v) {      * today.settonow();      * string timestamp = today.format("%y-%-m-%d %h:%m:%s");      * <p/>      * if (!textutils.isempty(ettasks.gettext().tostring())) {      * mydb.insertrow(ettasks.gettext().tostring(), timestamp);      * <p/>      * }      * populatelistview();      * }      */      private void opendb() {         mydb = new dbadapter(getactivity());         mydb.open();     }      private void populatelistview() {         cursor cursor = mydb.getallrows();          string[] fromfieldnames = new string[]{dbadapter.key_rowid, dbadapter.key_task, dbadapter.key_image};         int[] toviewids = new int[]{r.id.idview, r.id.resourceview, r.id.imageviewpicture};         simplecursoradapter mycursoradapter;         mycursoradapter = new simplecursoradapter(getactivity(), r.layout.tobedeletedd_view, cursor, fromfieldnames, toviewids, 0) {         };         listview mylist = (listview) getview().findviewbyid(r.id.listview);          mylist.setadapter(mycursoradapter);      }      private void updatetask(long id) {         cursor cursor = mydb.getrow(id);          if (cursor.movetofirst()) {             string task = ettasks.gettext().tostring();             today.settonow();             string date = today.format("%y-%-m-%d %h:%m:%s");              dbimage.builddrawingcache();//draws image bitmap             bitmap bmap = dbimage.getdrawingcache();              mydb.updaterow(id, task, date,getbytes(bmap));         }          cursor.close();     }      private void listviewitemclick() {         listview mylist = (listview) getview().findviewbyid(r.id.listview);         mylist.setonitemclicklistener(new adapterview.onitemclicklistener() {             @override             public void onitemclick(adapterview<?> parent, view view, int position, long id) {                 updatetask(id);                 populatelistview();             }         });     }         private void listviewitemlongclick() {         listview mylist = (listview) getview().findviewbyid(r.id.listview);          mylist.setonitemlongclicklistener(new adapterview.onitemlongclicklistener() {               @override             public boolean onitemlongclick(adapterview<?> parent, view view, int position, long id) {                 mydb.deleterow(id);                 populatelistview();                  return false;             }         });      } /**     public bitmap convertblobtobitmap(byte[] blobbytearray) {         bitmap tempbitmap=null;         if(blobbytearray!=null)             tempbitmap = bitmapfactory.decodebytearray(blobbytearray, 0, blobbytearray.length);         return tempbitmap;     }     public class task_like_flag extends asynctask<string, void, void> {         private final progressdialog dialog = new progressdialog(getactivity());         jsonobject object_feed;         // can use ui thread here         protected void onpreexecute() {             this.dialog.setmessage("loading...");             this.dialog.setcancelable(false);             this.dialog.show();         }          @override         protected void doinbackground(string... params) {             url url = null;             try {                 url = new url("http://i.imgur.com/cwdwl6l.png");             } catch (malformedurlexception e) {                 // todo auto-generated catch block                 e.printstacktrace();             }  //http://example.com/image.jpg             //open connection             urlconnection ucon = null;             try {                 ucon = url.openconnection();             } catch (ioexception e) {                 // todo auto-generated catch block                 e.printstacktrace();             }             //buffer download             inputstream = null;             try {                 = ucon.getinputstream();             } catch (ioexception e) {                 // todo auto-generated catch block                 e.printstacktrace();             }             bufferedinputstream bis = new bufferedinputstream(is,128);             baf = new bytearraybuffer(128);             //get bytes 1 one             int current = 0;             try {                 while ((current = bis.read()) != -1) {                     baf.append((byte) current);                 }             } catch (ioexception e) {                 // todo auto-generated catch block                 e.printstacktrace();             }             today.settonow();             string timestamp = today.format("%y-%-m-%d %h:%m:%s");             string votetext = "test";             mydb.insertrow(ettasks.gettext().tostring(), timestamp, baf.tobytearray(), votetext);             return null;         }          @override         protected void onpostexecute(void result) {             byte[] imagebytearray;             bitmap theimage = null;             try{                 cursor cursor = mydb.fetchallnotes();                // startmanagingcursor(mydb);                  if (cursor.movetofirst()) {                       {                         imagebytearray   =  cursor.getblob(cursor.getcolumnindex(dbadapter.key_image));                         bytearrayinputstream imagestream = new bytearrayinputstream(imagebytearray);                         theimage= bitmapfactory.decodestream(imagestream);                      } while (cursor.movetonext());                 }             }catch(exception e){                 log.v("excep", ""+e);             }             img.setimagebitmap(theimage);             if (this.dialog.isshowing()) {                 this.dialog.dismiss();             }         }     } */       // convert bitmap byte array     public static byte[] getbytes(bitmap bitmap) {         bytearrayoutputstream stream = new bytearrayoutputstream();         bitmap.compress(bitmap.compressformat.png, 0, stream);         return stream.tobytearray();     }      // convert byte array bitmap     public static bitmap getimage(byte[] image) {         return bitmapfactory.decodebytearray(image, 0, image.length);     }  } 

blob in databases designed storing pictures audios , videos have huge size. , stored binary data blob. when query, got byte[]. convert byte[] bitmap. codes :

byte[] imagequery=null; if(cur.movetonext()){     imagequery=cur.getblob(cur.getcolumnindex("image")); } bitmap imagebitmap=bitmapfactory.decodebytearray(imagequery, 0, imagequery.length); 

i hope these codes inspire you.


Popular posts from this blog