Здравствуйте.
Делаю следующее приложение:
Есть некая SQlite бд на сервере, в ней есть таблица, а в поле таблицы лежит картинка(код ниже):
CREATE TABLE test (rowid INTEGER PRIMARY KEY AUTOINCREMENT, num1 REAL, num2 REAL, num3 REAL, num4 REAL, picture BLOB);
INSERT INTO test (num1, num2, num3, num4, picture) VALUES(1.1, 1.2, 1.3, 1.4, readfile('download.png'));
На сервере стоит Tomcat, который через сервис выбирает эту картинку из БД и отдает в формате Json:
private JSONArray getDbDataInJsonArrayFormat() {
String sql = "SELECT rowid, num1, num2, num3, num4, picture FROM test";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
JSONArray jsonResult = new JSONArray();
while (rs.next()) {
JSONObject jsonRow = new JSONObject();
jsonRow.accumulate("picture", rs.getString("picture"));
jsonResult.put(jsonRow);
}
return jsonResult;
} catch (SQLException e) {
LOG.error(e.getMessage());
return null;
}
}
Android подключается к сервису, качает Json, кладет картинку в свою БД:
try {
db.beginTransaction();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonRow = response.getJSONObject(i);
String picture = jsonRow.getString("picture");
ContentValues values = new ContentValues();
values.put(Test.PICTURE, picture);
db.insert(TEST, null, values);
}
db.setTransactionSuccessful();
} catch (Exception e) {
Log.w("Error: ", e);
} finally {
db.endTransaction();
}
Потом я делаю выборку строки из БД, пытаюсь сформировать BLOB, но ничего не получается:
public Cursor getAllDataFromTestTable() {
SQLiteDatabase db = mDbOpenHelper.getWritableDatabase();
String table = TEST;
Cursor c = db.query(table, null,
null, null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
public static List<ContentValues> getResultStringListAndClose(Cursor c) {
final List<ContentValues> resultStringList = getAllDataFromDB(c);
closeCursor(c);
return resultStringList;
}
private void onDataLoadedFromDb(Cursor c) {
List<ContentValues> resList = DbUtils.getResultStringListAndClose(c);
for (int i = 0; i < resList.size(); ++i) {
ContentValues rowValues = resList.get(i);
// picture
ImageView picture = new ImageView(this);
byte[] encodeByte = rowValues.getAsByteArray(DbContract.Test.PICTURE);
Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
picture.setImageBitmap(Bitmap.createScaledBitmap(bitmap, picture.getWidth(),
picture.getHeight(), false));
}
}
Переменная bitmap оказывается равна null.
Подскажите, пожалуйста, в чем тут ошибка или как правильно сделать мою задачу?