2012-06-26 65 views
0

我目前正在設計一個需要在MapView上繪製路線的應用程序。爲了這個正常工作,我需要得到一個KML文件資料,我從獲得:嘗試從手機獲取KML節點值時獲取空值,但不是在模擬器上獲取android

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

我創建了一個測試項目,以確保該數據被正確接收。問題是它在我的模擬器上完美運行,但不在實際的android手機上。

以下代碼片段在單擊按鈕時啓動線程,獲取輸入流響應(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文件裏面的「線段形式」元素的內容。這些內容是可用於繪製路線的座標列表。

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手機上,它顯示爲空?

我在eclipse上爲Android 2.3.3構建,我使用三星Galaxy S2進行測試。

回答