java - 在BrowserField的GoogleMap中,黑莓如何引用位于项目的notes/voiceover文件夹的图像

  显示原文与译文双语对照的内容

我在BrowserField里展示了一个谷歌地图。

这是相关代码:


private String setUpHtmlString(Coordinates coordinates){
 StringBuffer mapString = new StringBuffer();
 mapString.append("" +
"<!DOCTYPE html>" +
"<html>" +
" <head>" +
" <meta http-equiv='content-type' content='text/html; charset=UTF-8'/>" +
" <title>Google Maps Multiple Markers</title>" +
" <script src='http://maps.google.com/maps/api/js?sensor=false' type='text/javascript'></script>" +
" </head>" +
" <body>" +
" <div id='map' style='width: 500px; height: 600px;'></div>" +
" <script type='text/javascript'>" +
" var locations = [");

 for (int i = 0; i <_placesStringArray.length; i++) {
 Address address = ((Place)_hashTablePlaces.get(_placesStringArray[i])).getAddress();
 mapString.append("['"+address.getDescription()+"',"+address.getLatitude()+","+address.getLongitude()+","+i+"]");
 if(i<_placesStringArray.length - 1)
 mapString.append(",");
 }

 mapString.append("];");

 mapString.append(
" var map = new google.maps.Map(document.getElementById('map'), {" +
" zoom: 15," +
" center: new google.maps.LatLng(-25.290646, -57.584080)," +
" mapTypeId: google.maps.MapTypeId.ROADMAP });" +
" var infowindow = new google.maps.InfoWindow();" +
" var marker, i;" +
" for (i = 0; i <locations.length; i++) {" +
" marker = new google.maps.Marker({" +
"icon:'https://maps.google.com/mapfiles/kml/shapes/schools_maps.png',"+
" position: new google.maps.LatLng(locations[i][1], locations[i][2]), map: map });" +
" google.maps.event.addListener(marker, 'click', (function(marker, i) {" +
" return function() {" +
" infowindow.setContent(locations[i][0]);" +
" infowindow.open(map, marker);" +
" }" +
" })(marker, i)); }" +
" </script>" +
" </body>" +
"</html>");
 return mapString.toString();
 }

如你所见,icon 指向外部 url,但是应该如何在应用程序的dbo文件夹中写入图像文件路径。

enter image description here

我试图以多种方式引用它,如下所示:


"icon:'local:///assets/images/marker.png'
"icon:'resources/images/marker.png'

没有成功。

先谢谢了。

时间: 作者:

我不会建议你硬编码 html inside 文件,因为代码不可以读,也难以查找未来的修改。 inline javascript已经是一件坏事,但在java代码中将所有内容都放入一个字符串是一个。

选项 #1: 干净的方式
相反,你可以拥有一个资源html文件,并使用"local:///" URL加载它,如BrowserField演示所示: 显示应用程序应用程序中资源的HTML内容。

你可以在同一个目录中放置javascript和css文件,就像在常规 static 网站中那样。 因此理论上你也可以放置图像资源文件,并从html或者js文件引用它们。 url不需要完整路径( 比如: 而不是 local:///assets/images/marker.png,你应该有 local:///marker.png

在html文档中插入动态内容,然后从java代码中插入占位符,然后用java代码替换占位符,用动态字段替换占位符。

这样你就可以解决可以修改性和关注。

选项 #2: 肮脏的黑客
我已经向你展示了为什么你的代码是脏的,但是如这里多的事情,它仍然会变得更糟。 你可以通过将图像文件编码为base64字符串,并在标记或者javascript中设置一个"data://" url来添加新的unmodifiability层。 如果 icon 真的很小并且你预先不会经常更改它,但是请注意base64字符串可以能会大大增长。

选项 #3 ( 未测试)
这也是一个 hack 。 假设可以使用 Class.getResourceAsStream 打开映像,可以使用java代码实例化一个 ProtocolController,然后调用 setNavigationRequestHandler 设置处理感兴趣的请求,并传递使用 Class.getResourceAsStream 加载的内容。

奖金:( 未测试)
这里有一个指向论坛帖子的链接,其中一个人显示你也可以使用一个以"cod:///". 开头的URL来引用这个图像。

作者:
...