首页 / 浏览问题 / 移动GIS / 问题详情
android 地图编辑闪退
89EXP 2018年08月20日
08-20 17:43:50.234 13244-13356/com.app.pipelinesurvey A/libc: Fatal signal 8 (SIGFPE), code -6, fault addr 0x33bc in tid 13356 (Thread-1970)
                                                              
                                                              [ 08-20 17:43:50.235   338:  338 W/         ]
                                                              debuggerd: handling request: pid=13244 uid=10297 gid=10297 tid=13356
 

你好,在编辑地图加点,有时候连续添加了几十个点都没事,有时候添加了几个点就闪退,提示以上错误信息,可以告诉我是什么问题吗

2 个回答

你好,请问你用的imobile是哪个版本的呢?
9,127EXP 2018年08月21日
8c版本
我这边测试了一下是没有问题的,麻烦你贴一下你的代码。
1.加点事件触发
 case R.id.rdBtnDrawPoint:
                hideBottomPanel();
                if (DataHandlerObserver.ins().setAction(Action.CREATEPOINT)) {
                    DataHandlerObserver.ins().setMapActionType(MAPACTIONTYPE.Action_CreatePoint);
//                    ToastUtil.show(this.getContext(), "创建管点设置成功", 3);
//                    return;
                }

2. 加点或者查询点代码

//创建、查询点 ,先查询范围是否有点,有点则查询,没点则创建
case Action_CreatePoint: {
    Recordset _result = queryPointByMouseXMouseY(motionEvent.getX(), motionEvent.getY());
    //创建管点
    if (_result.isEmpty()) {
        if (m_mapCtrl.getAction().toString() != Action.CREATEPOINT.toString())
            return false;
        LogUtills.i("。。。。set onTouch ACTION_UP");
        Geometry _geo = m_mapCtrl.getCurrentGeometry();
        if (_geo == null) {
            LogUtills.i("create point get currentgeometry is null");
            return false;
        }
        LogUtills.i("create point Geo Type = " + _geo.getType() + ", smid = " + _geo.getID() + ", current type = " + m_currentLayerName);
        Point _pt = new Point();
        _pt.setX((int) motionEvent.getX());
        _pt.setY((int) motionEvent.getY());
        Point2D _reP = m_mapCtrl.getMap().pixelToMap(_pt);
        m_Framactive.startActivity(new Intent(m_Framactive, DrawPipePointActivity.class).
                putExtra("gpType", m_currentLayerName.replace("_", "-")).
                putExtra("x", _reP.getX()).
                putExtra("y", _reP.getY()).
                putExtra("smId", -1));
    } else {
        //范围查询编辑管点
        int _smid = _result.getID();
        LogUtills.i("selection point smid = ", String.valueOf(_smid));
        m_mapCtrl.getMap().refresh();
        BaseFieldPInfos _infosP = BaseFieldPInfos.createFieldInfo(_result);
        Intent _intent = new Intent(m_Framactive, QueryPipePointActivity.class);
        Bundle bundle = new Bundle();
        bundle.putInt("smId", _smid);
        bundle.putParcelable("info", _infosP);
        bundle.putString("gpType", m_currentLayerName.replace("_", "-"));
        _intent.putExtras(bundle);
        m_Framactive.startActivity(_intent);
    }

3.queryPointByMouseXMouseY(motionEvent.getX(), motionEvent.getY())方法

/**
 * @param x 像素坐标X
 * @param y 像素坐标Y
 * @return 范围查询
 */
public Recordset queryPointByMouseXMouseY(float x, float y) {
    Point _pt = new Point();
    _pt.setX((int) x);
    _pt.setY((int) y);
    Point2D _reP = m_mapCtrl.getMap().pixelToMap(_pt);

    GeoPoint _geoPt = new GeoPoint(_reP);
    DatasetVector _dv = (DatasetVector) getPtLayerByName().getDataset();
    return _dv.query(_geoPt, 3.0, CursorType.STATIC);
}
代码也没看出啥问题,添加点的思路主要就是设置这个图层可编辑,然后添加点,最后submit
还没到最后submit这一步,就是手点击屏幕加点的时候就闪退了,图层可编辑应该是开了的,因为之前都是加点成功几个后才会偶尔闪退一次,这种问题会不会与手机性能有关,点符合渲染的时候内存溢出,因为我是加了单值专题图的,符号都是自己在桌面端点符号库画的,有时候加点成功了专题图没显示,重进了之后再加点又可以了,图层我都是设置为可显示的
您好,根据您提供的信息,有以下几点分析:

1. 您给的崩溃日志并不完整,无法从日志判断错误原因

   1)查看在IDE中查看所有应用完整日志,可找到更详细的日志

   2)如果在IDE中没找到错误日志,或没有连接IDE,可使用命令行抓取:

      adb logcat -v time > D:\log.txt ,执行几秒钟,然后 Ctrl + C 结束抓取日志;

      在日志文件中查找发生崩溃的时间段,与您的应用相关的日志。

2. 您给的代码有几个问题

   1) queryPointByMouseXMouseY()中创建的GeoPoint没有释放资源,长期使用会内存泄露,使用后请调用dispose()方法释放资源

   2)创建点的case中,查询得到的Recordset和MapControl.getCurrentGeometry()得到的Geo在使用后没有调用dispose(),同样会造成内存泄露

   3)就给的代码来看,你使用了MapControl.setAction(Action.CREATEPOINT),这将通过手势绘制点对象,可直接提交到数据集。但是,您又启动了其他的Activity来做处理,Activity的切换和数据的使用不当也可能导致程序崩溃。对于这一点,需要根据您的代码架构和应用逻辑才能做进一步的分析。

可以先用命令行抓日志找找原因,有什么发现或疑问再交流。
694EXP 2018年08月21日
好的,谢谢你的解答!
...