Java BlackBerry-如何引用Google地图浏览器中项目的res/img文件夹中的图像

Java BlackBerry-如何引用Google地图浏览器中项目的res/img文件夹中的图像,java,google-maps,blackberry,Java,Google Maps,Blackberry,我正在浏览器区域内显示谷歌地图 以下是相关代码: private String setUpHtmlString(Coordinates coordinates){ StringBuffer mapString = new StringBuffer(); mapString.append("" + "<!DOCTYPE html> " + "<html> " +

我正在浏览器区域内显示谷歌地图

以下是相关代码:

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();
    }
没有成功


提前感谢。

我不会建议您在.java文件中硬编码html,因为代码不可读,也很难找到以供将来修改。内联javascript已经是一件坏事,但在java代码中将所有内容都放在字符串中是超越耦合的一步

选项#1:最干净的方式
相反,您可以拥有一个资源html文件,并使用“local://”URL加载它,如BrowserField演示所示:

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

如果需要在html中插入动态内容,则始终可以在模板html资源文件中插入占位符,然后从java代码中执行string.replace以用动态字段替换占位符

通过这种方式,您可以解决可修改性和关注点分离问题

选项2:肮脏的黑客 我已经向你展示了为什么你的代码是肮脏的,但是生活中的很多事情都会让它变得更糟。通过将图像文件编码为base64字符串,并在标记或javascript中为图像设置“data://”url,可以添加一个新的不可修改层。如果图标非常小,并且您事先知道不会经常更改它,那么您可能可以接受,但请注意base64字符串可能会变得非常大

选项#3(未测试)
这也是一种黑客行为。假设您可以使用
Class.getResourceAsStream
打开映像,您可以在java代码中实例化
ProtocolController
,然后调用
setNavigationRequestHandler
设置拦截您感兴趣的请求类型的处理程序,并使用
Class.getResourceAsStream
传递加载的内容

奖金选项:(未测试)

这里有一个链接,一个家伙告诉你,你也可以使用一个以“cod://”开头的URL来引用图像。这取决于最终的目录结构和你的html文件保存在哪里。如果
img
和您创建的html文件位于同一目录中(并且marker.png保存在img目录中),您应该使用“icon:'img/marker.png'”。谢谢Anto,但我没有html文件,因为html是从字符串创建的,并传递给BrowserField对象的displayContent()方法。
"icon:'local:///assets/images/marker.png'
"icon:'resources/images/marker.png'