CursorWindow:窗口已满

问题描述 投票:2回答:1

我很新,经过几天,也许我发现我有这个问题,我在一个大的listView中有一个非常大的数据

W/CursorWindow: Window is full: requested allocation 1432389 bytes, free space 750700 bytes, window size 2097152 bytes

E/CursorWindow: Failed to read row 0, column 0 from a CursorWindow which has 0 rows, 64 columns.

W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x420aeda0) 03-03 15:50:00.162 16239-16239/id.co.bumisentosa.yantek E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.

我已经阅读了同样的问题android java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow

我发现我的问题是我的blob(byte)中的图像不会加载到我的listView中。

然后我该如何解决我的cameraIntent并将其保存到特定文件夹然后将其放入数据库并将其加载到ListView中。我真的需要你的帮助和例子。谢谢

我用的是这样的

 public void openCamera(int resultCode) {
    Inspection_JTR_Fragment_Foto_Tab.gallery = false;

    File image = new File(appFolderCheckandCreate(resultCode), "img" + getTimeStamp()
            + ".jpg");
    Uri uriSavedImage = Uri.fromFile(image);
    id.co.bumisentosa.yantek.fragment_JTM.Inspection_JTM_Fragment_Foto_Tab.cameraImagePath = image.getAbsolutePath();
    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
    i.putExtra("return-data", true);
    startActivityForResult(i, resultCode);
}





private String appFolderCheckandCreate(int resultCode) {

    String appFolderPath = "";
    File externalStorage = Environment.getExternalStorageDirectory();

    switch (resultCode) {
        case 1:
            if (externalStorage.canWrite()) {
                appFolderPath = externalStorage.getAbsolutePath() + "/yantek-babel-android/jtr/Keseluruhan Tiang";
                File dir = new File(appFolderPath);

                if (!dir.exists()) {
                    dir.mkdirs();
                }

            } else {

            }
            break;

    }
    return appFolderPath;
}

并将其保存到数据库

public boolean onOptionsItemSelected(MenuItem item) {
    final int id = item.getItemId();
    if (id == R.id.action_upload) {
        // Upload data ke server

       imageArray = Inspection_JTM_Fragment_Foto_Tab.getimageArray();
        imageArray_2 = Inspection_JTM_Fragment_Foto_Tab.getimageArray_2();


        databaseHandler.saveTest(new ItemsDetails(


                imageArray,
                imageArray_2
                ));

    }
    return super.onOptionsItemSelected(item);

}

我的数据库

 public String saveTest(ItemsDetails details) {

    try {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        //  cv.put(KEY_ID, post.getId());
        //  cv.put(KEY_ID, "null");

        cv.put(COL_LOCATION_ID, details.getunitID());
        cv.put(COL_SECTION_ID, details.getjaringanID());
        cv.put(COL_INSPECTION_DATE, details.gettanggalInspeksi());
        cv.put(COL_INSPECTION_TYPE_ID, details.gettipeInspeksiID());

        cv.put(COL_PHOTO_ENTIRE_PATH, details.getimageArray());
        cv.put(COL_PHOTO_ISOLATOR_PATH, details.getimageArray_2());

        cv.put(COL_POLE_NO, details.getnoTiang());
        cv.put(COL_POLE_IRON, details.gettiangBesi());
        cv.put(COL_POLE_CONCRETE, details.gettiangBeton());
        cv.put(COL_POLE_WOOD, details.gettiangKayu());

        cv.put(COL_POLE_CONDITION_BROKEN, details.getkondisiTiangRetak());
        cv.put(COL_POLE_CONDITION_TILT, details.getkondisiTiangMiring());
        cv.put(COL_POLE_CONDITION_SHIFT, details.getkondisiTiangPindah());

        cv.put(COL_CROSS_ARM_TWIST, details.getcrossArmMelintir());
        cv.put(COL_CROSS_ARM_RUST, details.getcrossArmKarat());
        cv.put(COL_CROSS_ARM_TILT, details.getcrossArmMiring());

        cv.put(COL_ARM_TIE_REPAIR, details.getarmTiePerbaiki());
        cv.put(COL_ARM_TIE_RUST, details.getarmTieKarat());
        cv.put(COL_ARM_TIE_BRACE, details.getarmTiePasang());

        cv.put(COL_ISOLATOR_FULCRUM_R_LEAK, details.getisolatorTumpuRGompel());
        cv.put(COL_ISOLATOR_FULCRUM_R_BROKEN, details.getisolatorTumpuRPecah());
        cv.put(COL_ISOLATOR_FULCRUM_S_LEAK, details.getisolatorTumpuSGompel());
        cv.put(COL_ISOLATOR_FULCRUM_S_BROKEN, details.getisolatorTumpuSPecah());
        cv.put(COL_ISOLATOR_FULCRUM_T_LEAK, details.getisolatorTumpuTGompel());
        cv.put(COL_ISOLATOR_FULCRUM_T_BROKEN, details.getisolatorTumpuTPecah());

        cv.put(COL_ISOLATOR_PULL_R_LEAK, details.getisolatorTarikRGompel());
        cv.put(COL_ISOLATOR_PULL_R_BROKEN, details.getisolatorTarikRPecah());
        cv.put(COL_ISOLATOR_PULL_S_LEAK, details.getisolatorTarikSGompel());
        cv.put(COL_ISOLATOR_PULL_S_BROKEN, details.getisolatorTarikSPecah());
        cv.put(COL_ISOLATOR_PULL_T_LEAK, details.getisolatorTarikTGompel());
        cv.put(COL_ISOLATOR_PULL_T_BROKEN, details.getisolatorTarikTPecah());

        cv.put(COL_ARRESTER_R_BROKEN, details.getarresterRusakR());
        cv.put(COL_ARRESTER_S_BROKEN, details.getarresterRusakS());
        cv.put(COL_ARRESTER_T_BROKEN, details.getarresterRusakT());

        cv.put(COL_CONDUCTOR_R_BUYER, details.getkonduktorRBuyer());
        cv.put(COL_CONDUCTOR_R_LOOSE, details.getkonduktorRKendor());
        cv.put(COL_CONDUCTOR_S_BUYER, details.getkonduktorSBuyer());
        cv.put(COL_CONDUCTOR_S_LOOSE, details.getkonduktorSKendor());
        cv.put(COL_CONDUCTOR_T_BUYER, details.getkonduktorTBuyer());
        cv.put(COL_CONDUCTOR_T_LOOSE, details.getkonduktorTKendor());

        cv.put(COL_CONNECTOR_PG_R_35MM, details.getkonektorPGR35mm());
        cv.put(COL_CONNECTOR_PG_R_70MM, details.getkonektorPGR70mm());
        cv.put(COL_CONNECTOR_PG_R_150MM, details.getkonektorPGR150mm());

        cv.put(COL_CONNECTOR_PG_S_35MM, details.getkonektorPGS35mm());
        cv.put(COL_CONNECTOR_PG_S_70MM, details.getkonektorPGS70mm());
        cv.put(COL_CONNECTOR_PG_S_150MM, details.getkonektorPGS150mm());

        cv.put(COL_CONNECTOR_PG_T_35MM, details.getkonektorPGT35mm());
        cv.put(COL_CONNECTOR_PG_T_70MM, details.getkonektorPGT70mm());
        cv.put(COL_CONNECTOR_PG_T_150MM, details.getkonektorPGT150mm());

        cv.put(COL_BENDING_WIRE_R, details.getbendingWireR());
        cv.put(COL_BENDING_WIRE_S, details.getbendingWireS());
        cv.put(COL_BENDING_WIRE_T, details.getbendingWireT());

        cv.put(COL_ULTRASONIC_R, details.getultrasonicR());
        cv.put(COL_ULTRASONIC_S, details.getultrasonicS());
        cv.put(COL_ULTRASONIC_T, details.getultrasonicT());

        cv.put(COL_GSW_EXIST, details.getgswAda());
        cv.put(COL_GSW_NOT_EXIST, details.getgswTidakAda());

        cv.put(COL_TREE_EXIST, details.getpohonAda());
        cv.put(COL_TREE_NOT_EXIST, details.getpohonTidakAda());

        cv.put(COL_LONGITUDE, details.getlongitude());
        cv.put(COL_LATITUDE, details.getlatitude());

        cv.put(COL_SUGGESTION, details.getSaran());
        cv.put(COL_DESCR, details.getketerangan());


        db.insert(INSPECTIONS_MV_TABLE_NAME, null, cv);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return getNewTestID();

}                                
java android listview android-sqlite android-camera-intent
1个回答
0
投票

然后我该如何解决我的cameraIntent并将其保存到特定文件夹然后将其放入数据库并将其加载到ListView中。我真的需要你的帮助和例子。

总之,你不能。虽然您可以将图像存储在数据库中,但无法从数据库中检索它,因为它太大而无法容纳限制为2MB(2097152)的CursorWindow。

图像本身大约是1432389字节,但CursorWindow只有750700字节。因此1432389大于750700图像(blob)时无法提取。

如果您符合以下条件,可以解决这个问题: -

save it to a specific folder, then
save the path (or part of the path) in the database rather than the image, and then
extract the path and then get the image via the path when loading the ListView.
© www.soinside.com 2019 - 2024. All rights reserved.