0

我目前正在设计一个需要在 MapView 上绘制路线的应用程序。为了使其正常运行,我需要从我获得的 KML 文档中获取数据:

http://maps.google.com/maps?f=d&hl=en&saddr=-33.882993,18.63486&daddr=-33.870162,18.657837&ie=UTF8&0&om=0&output=kml

我创建了一个测试项目以确保正确接收此数据。问题是它可以在我的模拟器上完美运行,但不能在实际的安卓手机上运行。

以下代码在单击按钮时启动一个线程,获取输入流响应 (KML)。

public void onClick(View v) {
        if (v.getId()== R.id.btn1)
        {   
              new Thread() {
                 @Override
                 public void run() {
                    String url = "http://maps.google.com/maps?f=d&hl=en&saddr=-33.882993,18.63486&daddr=-33.870162,18.657837&ie=UTF8&0&om=0&output=kml";
                    InputStream is = getConnection(url);

                    mRoad = RouteProvider.getRoute(is);
                    mHandler.sendEmptyMessage(0);
                 }
             }.start(); 
        }   

}

private InputStream getConnection(String url) {
    InputStream is = null;
    try {
           HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection();
            conn.connect();
            is = conn.getInputStream();
            conn = null;
    } catch (MalformedURLException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    }
     return is;
    }

目前,getRoute() 需要做的就是提供 KML 文档中“LineString”元素的内容。这些内容是可用于绘制路线的坐标列表。

public class RouteProvider {
    /** Gets data from KML response **/
    public static Road getRoute(InputStream is) {
        Road road = new Road();

        try 
        {
            Document xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
            NodeList a = xmlDoc.getElementsByTagName("LineString");
            System.out.println(a.item(0).getTextContent());
            road.mName = a.item(0).getTextContent();


        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }   


        return road;
      }

在我正在运行的模拟器上,road.mName 中显示了正确的值,这是一个坐标列表。在Android手机上它显示为null?

我正在为 Eclipse 上的 Android 2.3.3 构建,我使用三星 Galaxy S2 进行测试。

4

1 回答 1

1

毕竟不需要使用KML。只是使用谷歌地图来提供 xml 格式。容易得多。 https://developers.google.com/maps/documentation/directions/

于 2012-12-07T09:20:28.373 回答