Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从sqlite数据库中获取要显示的多个图像_Android_Database_Sqlite - Fatal编程技术网

Android 如何从sqlite数据库中获取要显示的多个图像

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

我有一个包含12个图像的图像数据库,我想在活动中显示这些图像。以下是我进行转换的代码:

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值。