多思考,一步一步地解决程序出现的问题
在遇到程序崩溃了之后,目前我的第一个想法是招人帮忙,缺乏独立思考的习惯。这对于编程是非常糟糕的习惯。我觉得应该马上改变这个坏习惯。可以从以下的例子来着手改变:
今天在做一个驾车查询,供参考的代码如下:
#region 配置驾车查询 this.carroute.QueryTask = w.GetTask("dg_qtask").Clone() as IQueryTask; this.carroute.QueryTask.Render = new MapBase.Render.SimplePointRender(); this.myMap.Layers.Add(this.poisearch.QueryTask.Render.DrawingBoard); this.carroute.RouteTask = w.GetTask("tdtroute").Clone() as IRouteTask; this.carroute.RouteTask.Render = new MapBase.Render.SimpleLineRender(); this.myMap.Layers.Add(this.carroute.RouteTask.Render.DrawingBoard); this.carroute.Map = myMap; #endregion
在上面的例子中,用到了poisearch面板,因为我的系统中不需要改面板,所以需要改变一下,我改成如下:
#region 配置驾车查询 this.carRoute.QueryTask = workshop.GetTask("qy_dmdz").Clone() as IQueryTask; this.carRoute.QueryTask.Render = new MapBase.Render.SimplePointRender(); //this.myMap.Layers.Add(this.poisearch.QueryTask.Render.DrawingBoard); this.carRoute.RouteTask = workshop.GetTask("qy_RouteTask").Clone() as IRouteTask; this.carRoute.RouteTask.Render = new MapBase.Render.SimpleLineRender(); this.myMap.Layers.Add(this.carRoute.RouteTask.Render.DrawingBoard); this.carRoute.Map = myMap; #endregion
这段代码会报错。经高人指点,对错误的分析应该是这样的:
(1)驾车包括两部分,QueryTask和RouteTask,所以上面的注释的代码应该解注释,而且那一句代码应该写错了,应改为:
this.myMap.Layers.Add(this.carRoute.QueryTask.Render.DrawingBoard);
(2) 这样改了之后,依然有错误。如果代码没有问题,那问题肯定在配置文件了,此时必须自己地比较与模板的差异
(3) 通过与模板比较之后,发现ServiceType错误了,必须是QueryTask,而不是FindTask。如下
<!--地名地址--> <Task ID="qy_dmdz" SourceType="NewMap" ServiceType="FindTask"> <Url>http://125.91.215.244:8719/NewMapServer/WebServices/FeatureServer.php?layer=qyxqd</Url> <PageSize>10</PageSize> <Field>Name</Field> </Task>
改为:
<!--地名地址--> <Task ID="qy_dmdz" SourceType="NewMap" ServiceType="QueryTask"> <Url>http://125.91.215.244:8719/NewMapServer/WebServices/FeatureServer.php?layer=qyxqd</Url> <PageSize>10</PageSize> <Field>Name</Field> </Task>
如此一步一步排除错误地方,错误就可以被发现,并被解决了。