Android 如何从sqlite数据库中获取要显示的多个图像
我有一个包含12个图像的图像数据库,我想在活动中显示这些图像。以下是我进行转换的代码:Android 如何从sqlite数据库中获取要显示的多个图像,android,database,sqlite,Android,Database,Sqlite,我有一个包含12个图像的图像数据库,我想在活动中显示这些图像。以下是我进行转换的代码: public class Utility { public static byte[] getBytes(Bitmap bitmap){ ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream); return str
public class Utility {
public static byte[] getBytes(Bitmap bitmap){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
public static Bitmap getPhoto(byte[] image){
return BitmapFactory.decodeByteArray(image, 0, image.length);
}}
这是我创建数据库条目的代码:
public long createSurveyImageRecord(byte[] sql_surv_img_1, byte[] sql_surv_img_2, byte[] sql_surv_img_3, byte[] sql_surv_img_4,
byte[] sql_surv_img_5, byte[] sql_surv_img_6, byte[] sql_surv_img_7, byte[] sql_surv_img_8,
byte[] sql_surv_img_9, byte[] sql_surv_img_10, byte[] sql_surv_img_11, byte[] sql_surv_img_12) {
ContentValues cv = new ContentValues();
cv.put(SURVIMG_1, sql_surv_img_1);
cv.put(SURVIMG_2, sql_surv_img_2);
cv.put(SURVIMG_3, sql_surv_img_3);
cv.put(SURVIMG_4, sql_surv_img_4);
cv.put(SURVIMG_5, sql_surv_img_5);
cv.put(SURVIMG_6, sql_surv_img_6);
cv.put(SURVIMG_7, sql_surv_img_7);
cv.put(SURVIMG_8, sql_surv_img_8);
cv.put(SURVIMG_9, sql_surv_img_9);
cv.put(SURVIMG_10, sql_surv_img_10);
cv.put(SURVIMG_11, sql_surv_img_11);
cv.put(SURVIMG_12, sql_surv_img_12);
return fieldInstDatabase.insert(DATABASE_TABLE_IMAGES, null, cv);
}
这是我从数据库获取数据的代码:
public String getSurvImage() {
String[] columns = new String[]{ROW_ID, SURVIMG_1, SURVIMG_2, SURVIMG_3, SURVIMG_4, SURVIMG_5, SURVIMG_6, SURVIMG_7, SURVIMG_8, SURVIMG_9, SURVIMG_10, SURVIMG_11, SURVIMG_12};
Cursor c = fieldInstDatabase.query(DATABASE_TABLE_IMAGES, columns, null, null, null, null, null);
String result = null;
int iRow = c.getColumnIndex(ROW_ID);
int iPic1 = c.getColumnIndex(SURVIMG_1);
int iPic2 = c.getColumnIndex(SURVIMG_2);
int iPic3 = c.getColumnIndex(SURVIMG_3);
int iPic4 = c.getColumnIndex(SURVIMG_4);
int iPic5 = c.getColumnIndex(SURVIMG_5);
int iPic6 = c.getColumnIndex(SURVIMG_6);
int iPic7 = c.getColumnIndex(SURVIMG_7);
int iPic8 = c.getColumnIndex(SURVIMG_8);
int iPic9 = c.getColumnIndex(SURVIMG_9);
int iPic10 = c.getColumnIndex(SURVIMG_10);
int iPic11 = c.getColumnIndex(SURVIMG_11);
int iPic12 = c.getColumnIndex(SURVIMG_12);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
result = result + " " + c.getString(iRow) + " " + Utility.getPhoto(c.getBlob(iPic1)) +
" " + Utility.getPhoto(c.getBlob(iPic2));
}
return result;
}
这是我要在活动中显示的代码:
ImageView survImage = (ImageView) findViewById(R.id.ivSQLsurv);
FieldInstallationDB survImg = new FieldInstallationDB(this);
survImg.open();
String pix = survImg.getSurvImage();
survImg.close();
byte[] px = pix.getBytes();
survImage.setImageBitmap(Utility.getPhoto(px));
还有我的logcat信息:
Process: com.example.sweetiean.stlfieldinstallation1, PID: 14363
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sweetiean.stlfieldinstallation1/com.example.sweetiean.stlfieldinstallation1.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.sweetiean.stlfieldinstallation1.MainActivity.onCreate(MainActivity.java:170)
我也试过这样做:
public Bitmap[] getSurvImage() {
String[] columns = new String[]{ROW_ID, SURVIMG_1, SURVIMG_2, SURVIMG_3, SURVIMG_4, SURVIMG_5, SURVIMG_6, SURVIMG_7, SURVIMG_8, SURVIMG_9, SURVIMG_10, SURVIMG_11, SURVIMG_12};
Cursor c = fieldInstDatabase.query(DATABASE_TABLE_IMAGES, columns, null, null, null, null, null);
Bitmap[] result = null;
int iRow = c.getColumnIndex(ROW_ID);
int iPic1 = c.getColumnIndex(SURVIMG_1);
int iPic2 = c.getColumnIndex(SURVIMG_2);
int iPic3 = c.getColumnIndex(SURVIMG_3);
int iPic4 = c.getColumnIndex(SURVIMG_4);
int iPic5 = c.getColumnIndex(SURVIMG_5);
int iPic6 = c.getColumnIndex(SURVIMG_6);
int iPic7 = c.getColumnIndex(SURVIMG_7);
int iPic8 = c.getColumnIndex(SURVIMG_8);
int iPic9 = c.getColumnIndex(SURVIMG_9);
int iPic10 = c.getColumnIndex(SURVIMG_10);
int iPic11 = c.getColumnIndex(SURVIMG_11);
int iPic12 = c.getColumnIndex(SURVIMG_12);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
//result = result + " " + c.getString(iRow) + " " + Utility.getPhoto(c.getBlob(iPic1));
result = new Bitmap[] {Utility.getPhoto(c.getBlob(iPic1)), Utility.getPhoto(c.getBlob(iPic2))};
}
return result;
}
以及要在avtivity中显示的我的代码:
ImageView survImage = (ImageView) findViewById(R.id.ivSQLsurv);
FieldInstallationDB survImg = new FieldInstallationDB(this);
survImg.open();
Bitmap[] pix = survImg.getSurvImage();
survImg.close();
survImage.setImageBitmap(pix);
但是“pix”下面加了下划线,表示setImageBitmap不能应用于android.graphics.Bitmap[]显示mainActivity.java文件代码。或者告诉我MainActivity文件中的行号170是什么?@行是byte[]px=pix.getBytes;然后确保从survImg获得位图数组。因为它在pix的位图数组中变为null。@你能告诉我怎么做吗,因为我不理解你的意思。survImg.getSurvImage返回null值。