Я вставил изображение захвата с помощью кода ниже и получаю "not null"
, который указывает, что данные не равны нулю.Приложение разбилось при извлечении изображения
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
if ((name != null && name.trim().length() > 0) && (result != null && result.trim().length() > 0)) {
// Toast.makeText(getActivity().getApplicationContext(), fk+"", Toast.LENGTH_LONG).show();
byte[] data=getBitmapAsByteArray(Global.img); // this is a function
if(data==null)
{
Toast.makeText(getActivity(), "null", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getActivity(), " not null", Toast.LENGTH_LONG).show();
SB.insertStaffBenefit(name, data, description, result, fk);
}
}
});
return claims;
}
public static byte[] getBitmapAsByteArray(Bitmap bitmap)
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
return outputStream.toByteArray();
}
Однако приложение пыталось извлечь захваченное изображение.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.receipt);
dbHelper = new MyDatabaseHelper(this);
final String k = getIntent().getExtras().getString("ID");
Toast.makeText(getApplicationContext(), k+"", Toast.LENGTH_LONG).show();
ImageView a=(ImageView)findViewById(R.id.imageView5);
database = dbHelper.getWritableDatabase();
c = database.rawQuery("SELECT s.Image FROM Information i LEFT JOIN StaffBenefit s ON s.Twd_id=i._id WHERE i._id=? ", new String[]{String.valueOf(k)},null);
if(c.moveToFirst())
{
byte[] img=c.getBlob(c.getColumnIndexOrThrow("Image"));
if(img!=null)
{
Log.e("TAG", " Not null");
}
else
{
Log.e("TAG", " null");
}
ByteArrayInputStream imageStream = new ByteArrayInputStream(img);
Bitmap theImage= BitmapFactory.decodeStream(imageStream);
a.setImageBitmap(theImage);
}
c.close();
}
}
MyDatabaseHelper.java
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_STAFF_BENEFIT + "(" + ID3 + " INTEGER PRIMARY KEY , Claim_Type TEXT, Image BLOB, Description TEXT , Amount TEXT, Twd_id INTEGER, FOREIGN KEY(Twd_id) REFERENCES "+TABLE_INFO+"(_id))");
}
Вызванный: java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец 0 от CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно . на android.database.CursorWindow.nativeGetBlob (нативный метод) на android.database.CursorWindow.getBlob (CursorWindow.java:404) в android.database.AbstractWindowedCursor.getBlob (AbstractWindowedCursor.java:45) в com.example .project.project.Receipt.onCreate (Receipt.java:40)
(Receipt.java:40)
byte[] img=c.getBlob(c.getColumnIndexOrThrow("Image"));
ли, как указано в Retrieve large blob from Android sqlite database ошибка вызвана большим сгустка? Как я могу это решить? Thanks
@Hoo Не могли бы вы опубликовать ваш запрос создать таблицу? – Amsheer
@ Amsheer уверен. См. Отредактированный. Я просто покажу вам таблицу, состоящую из столбца «image column» – Hoo
@Amsheer. В моем приложении функция камеры может поддерживать «выбранное изображение из галереи» и «брать фотографию». Загруженное изображение, выбранное из галереи, может быть восстановлено, но «захваченное изображение» не может. – Hoo