How to save the image taken from the camera and show it in the list - crash with "IllegalStateException"

I am confused about how to do this.

For the database, I use:

public void insertImage(byte[] bytes) { ContentValues cv = new ContentValues(); cv.put("imageblob", bytes); Log.e("inserted", "inserted"); dbHelper.getWritableDatabase().insert("Image", "imageblob", cv); } public byte[] getImage(Cursor c) { return (c.getBlob(1)); } 

Database Assistant:

  ... public static final String KEY_COMMENTS = "comments"; public static final String KEY_IMAGE = "imageblob"; private static final String SCRIPT_CREATE_DATABASE = "create table " + DATABASE_TABLE + " (" + KEY_ROWID + " integer primary key autoincrement, " + KEY_TITLE + " text not null, ......+KEY_COMMENTS+" text not null,"+KEY_IMAGE+" imageblob BLOB);"; 

MyItems:

 public class myItems { .... String comments; byte[] imageblob; public byte[] getImage() { return imageblob; } public void setImage(byte[] imageblob) { this.imageblob = imageblob; } 

Now I have a list in MainActivity. From another ShowList action, I have a button with which you can take a picture:

  case R.id.photobtn: Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST); break; 

In onActivityResult:

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == CAMERA_REQUEST){ Bitmap photo = (Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(photo); ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); sqlHandler.insertImage(byteArray); } 

My adapter:

The public class myAdapter extends BaseAdapter {

 ... public myAdapter(Context context, ArrayList<myItems> list) { this.context = context; this.setItems(list); } @Override public View getView(int position, View convertView, ViewGroup arg2) { myItems theItems = getItems().get(position); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.showadapterlist, null); } ... TextView Comments = (TextView) convertView.findViewById(R.id.text_comments); Comments.setText(theItems.getComments()); ImageView myImage=(ImageView) convertView.findViewById(R.id.myimage); myImage.setImageBitmap(getImageFromBLOB(theItems.getImage())); return convertView; } public static Bitmap getImageFromBLOB(byte[] mBlob) { byte[] bb = mBlob; return BitmapFactory.decodeByteArray(bb, 0, bb.length); } public ArrayList<myItems> getItems() { return items; } public void setItems(ArrayList<myItems> items) { this.items = items; } 

My problems:

1) The list is in MainActivity.The snapshot is taken from ShowList activity.In ShowList activity I have:

 case R.id.OKbtn: String mycomments = comments.getText().toString(); byte[] myimageblob=null; String query = "INSERT INTO MEMOR(title,...comments,imageblob)" + " values (..+ mytitle + "....+mycomments + "','" +myimageblob+ "')" sqlHandler.executeQuery(query); Intent k=new Intent(this,MainActivity.class); setResult(RESULT_OK,k); finish(); 

How do I handle the value of "imageblob"?

2) In MainActivity (where is the list view) I have:

  ... myItems theItems = new myItems(); theItems.setID(c1.getString(c1.getColumnIndex("_id"))); theItems.setTitle(c1.getString(c1.getColumnIndex("title"))); ... theItems.setComments(c1.getString(c1.getColumnIndex("comments"))); byte[] blob=c1.getBlob(c1.getColumnIndex("imageblob")); ByteArrayInputStream inputStream = new ByteArrayInputStream(blob); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); myList.add(theItems); 

How should I handle imageblob?

Right now, when I run my application, it crashes with "IllegalStateException" in the line

"byte [] blob = c1.getBlob (c1.getColumnIndex (" imageblob "));"

. If I try c1.setImage, this will not work.

------------------ NEW ---------------------------- --- ------------------- In one action:

 case R.id.photobtn: Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST); break; protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == CAMERA_REQUEST){ if (resultCode==RESULT_OK){ Bitmap photo = (Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(photo); ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.PNG, 100, stream); blobvalue = stream.toByteArray(); Bundle extras = new Bundle(); Intent k=new Intent(this,MainActivity.class); extras.putParcelable("Bitmap", photo); k.putExtras(extras); } } if (resultCode == RESULT_CANCELED) { } } 

In the adapter:

 public View getView(int position, View convertView, ViewGroup arg2) { myItems theItems = getItems().get(position); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.showadapterlist, null); } ImageView myImage=(ImageView) convertView.findViewById(R.id.myimage); final Bitmap image; if(theItems.getImagemyItems() != null) { byte []temp = theItems.getImagemyItems(); image = BitmapFactory.decodeByteArray(temp, 0, temp.length); myImage.setImageBitmap(image); } else { image = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); myImage.setImageBitmap(image); } 

In myItems:

 public class myItems { String id; ... byte[] imageblob; public String getID() { return id; } .... } 
0
android sqlite listview
Apr 11 '13 at
source share
1 answer

How do you create a database statement

  private static final String SCRIPT_CREATE_DATABASE = "create table " + DATABASE_TABLE + " (" + KEY_ROWID + " integer primary key autoincrement, " + KEY_TITLE + " text not null, ......+KEY_COMMENTS+" text not null,"+KEY_IMAGE+" imageblob BLOB);"; 

you mentioned that

  "+KEY_IMAGE+" imageblob BLOB 

therefore, the column value is the syntax of "imageblob imageblol BLOB", as this is an invalid sql statement. so just remove the "imageblob" from there and try this, this may solve your problem ....

+1
Apr 24 '13 at 10:35
source share



All Articles