ThinkGeo.com    |     Documentation    |     Premium Support

"Object reference not set to an instance of an object" exception inside GetFeatureById

Occasionally get the following. No idea why


 


> MapSuiteCore.DLL!ThinkGeo.MapSuite.Core.x1268e619012e8ab7.GetRecordOffset(int recordIndex = 2993) + 0x10e bytes 

  MapSuiteCore.DLL!ThinkGeo.MapSuite.Core.xdad12102199d8695.ReadRecord(int recordIndex = 2993) + 0x50 bytes 

  MapSuiteCore.DLL!ThinkGeo.MapSuite.Core.ShapeFileFeatureSource.GetFeaturesByIdsCore(System.Collections.Generic.IEnumerable<string> ids = {string[1]}, System.Collections.Generic.IEnumerable<string> returningColumnNames = Count = 1) + 0x17f bytes 

  MapSuiteCore.DLL!ThinkGeo.MapSuite.Core.FeatureSource.GetFeatureById(string id = "2993", System.Collections.Generic.IEnumerable<string> returningColumnNames = {string[1]}) + 0x1e8 bytes 

 


 


+  $exception {"Object reference not set to an instance of an object."} System.Exception {System.NullReferenceException}

 


  StackTrace "   at ThinkGeo.MapSuite.Core.x1268e619012e8ab7.GetRecordOffset(Int32 recordIndex)\r\n   at ThinkGeo.MapSuite.Core.xdad12102199d8695.ReadRecord(Int32 recordIndex)\r\n   at ThinkGeo.MapSuite.Core.ShapeFileFeatureSource.GetFeaturesByIdsCore(IEnumerable`1 ids, IEnumerable`1 returningColumnNames)\r\n   at ThinkGeo.MapSuite.Core.FeatureSource.GetFeatureById(String id, IEnumerable`1 returningColumnNames)\r\n   at ....FeatureSource_CustomColumnFetch(Object sender, CustomColumnFetchEventArgs e) in ...Map.ascx.cs:line 88\r\n   at ThinkGeo.MapSuite.Core.FeatureSource.OnCustomColumnFetch(CustomColumnFetchEventArgs e)\r\n   at ThinkGeo.MapSuite.Core.FeatureSource.GetFeaturesForDrawing(RectangleShape boundingBox, Double screenWidth, Double screenHeight, IEnumerable`1 returningColumnNames)\r\n   at ThinkGeo.MapSuite.Core.FeatureLayer.DrawCore(GeoCanvas canvas, Collection`1 labelsInAllLayers)\r\n   at ThinkGeo.MapSuite.Core.Layer.Draw(GeoCanvas canvas, Collection`1 labelsInAllLayers)\r\n   at ThinkGeo.MapSuite.WebEdition.LayerOverlay.DrawCore(GeoCanvas canvas, Object nativeImage, RectangleShape canvasExtent, GeographyUnit mapUnit)\r\n   at ThinkGeo.MapSuite.WebEdition.LayerOverlay.Draw(GeoCanvas canvas, Object nativeImage, RectangleShape canvasExtent, GeographyUnit mapUnit)\r\n   at ThinkGeo.MapSuite.WebEdition.x575d0da71229c23b.x62ef0ac77a37f260(Bitmap xdb0bfbdbb2208989)\r\n   at ThinkGeo.MapSuite.WebEdition.x575d0da71229c23b.xeecb74f73e2937be(Bitmap xdb0bfbdbb2208989)\r\n   at ThinkGeo.MapSuite.WebEdition.x575d0da71229c23b.xc690f57f5beb2a64(HttpContext x367528c7f091a5d2)" string

 



Matthew,  
  
 Are you using multi threading in your app? Seems there are some conflicts when reading shx file, can you provide more codes for us? I have never met this problem and it will be much helpful if you can provide a demo so we can recreate the issue. 
  
 Thanks, 
  
 Ben 


Not explicitly. But the web site is using Ajax and asp:UpdatePanels. 
 On resizing the browser also request to resize the graph in an ajax request. 
 I have posted a support requested (Might be under the name of Fergus Bown) with other issues I get with multiple Ajax requests 


I’ve just got this error now: 
  
 Application_Error got called. 
 Within this Server.GetLastError().InnerException gives 
  
 {“Index was outside the bounds of the array.”} 
     [System.IndexOutOfRangeException]: {“Index was outside the bounds of the array.”} 
     Data: {System.Collections.ListDictionaryInternal} 
     HelpLink: null 
     InnerException: null 
     Message: “Index was outside the bounds of the array.” 
     Source: “WebEdition” 
     StackTrace: "   at ThinkGeo.MapSuite.WebEdition.Map.xd8262f22d29c57d5(String[] x2ad333ebea325bde)\r\n   at ThinkGeo.MapSuite.WebEdition.Map.x57b61acc3e039aed(String x96adbb16060a076f, NameValueCollection x13e9d0e2d3dc9cb2)\r\n   at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)\r\n   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)" 
     TargetSite: {Void xd8262f22d29c57d5(System.String[])}

Matthew, 
 Are you using callback communicating with the server? If yes, you might have this issue. It’s a known bug in 3.1.16 and we will fix it in the next version. To work it around now, please copy the following code to the header tag block in your aspx page.  
 
 function OnMapCreated(map){
 var postData = decodeURIComponent(__theFormPostData);
 var startData = postData.substr(0, postData.indexOf(’&’));
 var endData = postData.substr(postData.indexOf(’&’), postData.length - postData.indexOf(’&’));
 __theFormPostData = startData + ‘,’ + map.getScale().toString() + endData;
}
 
  If the issue still exists, please provide us a demo so we can recreate it here. 
 Thanks, 
 Ben

That did not work.  
 I have tried posting it before and after the rest of the code in the OnMapCreated function required by the tooltip code. 
  
 e.g. 
         var OnMapCreated = function(map) { 
  
         map.events.register(‘mousemove’, map, function(e) { 
                 if (timer) { 
                     window.clearTimeout(timer); 
                     timer = null; 
                 } 
                 $get(‘divTooltips’).style.display = ‘none’; 
                 var beginToolTipsRequestDelegate = function(sender) { 
                     return function() { 
                         beginToolTipsRequest.apply(sender, arguments); 
                     } 
                 } 
                 clientX = e.clientX; 
                 clientY = e.clientY; 
                 timer = window.setTimeout(beginToolTipsRequestDelegate({ xy: e.xy, map: this }), delayInterval); 
             }); 
  
             // to work around tooltip bug in 3.1.16 
             var postData = decodeURIComponent(__theFormPostData); 
             var startData = postData.substr(0, postData.indexOf(’&’)); 
             var endData = postData.substr(postData.indexOf(’&’), postData.length - postData.indexOf(’&’)); 
             __theFormPostData = startData + ‘,’ + map.getScale().toString() + endData; 
  
  
         } 


Matt,


The codes works fine on my machine. Please run the attached demo and have a try.


Thanks,


Ben



472-Tooltips.zip (96.1 KB)

Hi Ben, 
  
 I am having the same issue and the OnMapCreated Javascript code did not fix the problem. Unfortunately, the page that the map is on is fairly complex and sending my project in is not really feasible… We are using callbacks (via Telerik’s control set) so I have a feeling that it is the same problem. The interesting thing is that I am using partial rendering on a less complex page (also via Telerik’s controls) with 2 maps and everything works fine… 
  
 Has there been any movement on this (a hotfix maybe?) or do you have any other tricks I could try? We are dead in the water currently and under a tight deadline (I know, I know…). 
  
 Thank you for any help! 
  
 Justin

I solved the problem for now - seems like a strange fix though. If I move the call to the method to load the map into the Page_PreRenderComplete event instead of the Page_Load event, callbacks no longer raise the above exception. 
  
 Go figure. 
  
 Seems like a fix might still be in order - but I hope you didn’t spend any time on this… 
  
 Thanks, 
  
 Justin

Justin, 
  
 I didn’t spend any time on it and thanks very much for letting me know in time! :-)  
  
 Ben 
  


Sorry Ben… 
  
 This one is back. Apparently all my "fix" did was delay the exception… It now re-appears after a couple of callbacks. 
  
 Do you have a timeline on the fix for this one or anthing else I can do in the meantime? 
  
 Thanks! 
  
 Justin

Justin,  
  
 Just wonder did you try the sample Tooltips.zip (in my reply on March 3rd ) and did that work fine? If yes, could you try to simplify your code and make a simple demo to recreate your issue? As the page is complex, it’s difficult to guess what’s the possible reason, it’s great if you can send that simple demo to us and we will see why the little workaround does work. 
  
 I’m sorry I cannot make a good ETA for the next release. I think it might be available in May but I’m not sure. Anyway, I hope you can send us that small demo so you do not need to wait for it to work. 
  
 Thanks, 
  
 Ben