首页 / 浏览问题 / 移动GIS / 问题详情
android,Recordset 的 edit 返回false
6EXP 2020年10月13日
        Datasource datasource = mWorkspace.getDatasources().get(0);
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("绘制");
        if (datasetVector == null){
            DatasetVectorInfo info = new DatasetVectorInfo();
            info.setType(DatasetType.REGION);
            info.setEncodeType(EncodeType.NONE);
            info.setName("绘制");
            datasetVector = datasource.getDatasets().create(info);
        }
        Recordset recordset = datasetVector.getRecordset(true, CursorType.DYNAMIC);
        LogUtils.i("record edit = " + recordset.edit());

以上代码最后输出为false,在iDesktop上可以正常绘制圆形

请问代码该如何修改?

1个回答

您好,根据代码截图您需要弄清楚两点:

1、使用recordset.edit()时是表示锁定并编辑记录集的当前记录,所以如果recordset中没有记录则返回为false;

2、datasetVector.getRecordset(true,CursorType.DYNAMIC),方法中的第一个参数为true时,不管数据集中是否有对象,返回的都是一个空的recordset,应设置为false;

另外,当recordset为空的时候,应该是往记录集中添加对象,使用addNew()方法,使用该方法时不能使用edit()方法,edit()的使用场景是修改对象或者对象的属性信息。
2,042EXP 2020年10月13日

您好,感谢您的评论

基于您上述回答我做了修改

        GeoCircle circle = new GeoCircle(point2D, 100);
        Datasource datasource = mWorkspace.getDatasources().get(0);
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("绘制");
        if (datasetVector == null){
            DatasetVectorInfo info = new DatasetVectorInfo();
            info.setType(DatasetType.REGION);
            info.setEncodeType(EncodeType.NONE);
            info.setName("绘制");
            datasetVector = datasource.getDatasets().create(info);
        }
        if (!datasetVector.isOpen()){
            datasetVector.open();
        }
        Recordset recordset = datasetVector.getRecordset(false, CursorType.DYNAMIC);
        boolean i1 = recordset.addNew(circle);
        LogUtils.i("i1 = " + i1);
        recordset.update();
        datasetVector.append(recordset);

已经打印输出数据集和记录集不是只读,但输出addNew()方法返回结果为 false,请问您知道是怎么回事吗

将圆对象转成面对象后再加载,另外最后一句追加可以删除,更新后就可以了。
非常感谢您的回复,已经可以了
...