0
我目前正在設計一個需要在MapView上繪製路線的應用程序。爲了這個正常工作,我需要得到一個KML文件資料,我從獲得:嘗試從手機獲取KML節點值時獲取空值,但不是在模擬器上獲取android
我創建了一個測試項目,以確保該數據被正確接收。問題是它在我的模擬器上完美運行,但不在實際的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進行測試。