Android 无法解析方法getElementsByTagName
我一直在尝试在android中绘制一条到给定点的路径。但是我收到一个错误,说无法解析方法getElementsByTagName(java.lang.String)我能做些什么来摆脱这个问题吗 我在这些行中遇到了错误 nodeListStep=elementLeg.getElementsByTagName(“步骤”) 及 解码多段线(elementStep.getElementsByTagName(“点”).item(0.getTextContent()) 我试着做这个例子 这是我的RotaTask.javaAndroid 无法解析方法getElementsByTagName,android,google-maps,Android,Google Maps,我一直在尝试在android中绘制一条到给定点的路径。但是我收到一个错误,说无法解析方法getElementsByTagName(java.lang.String)我能做些什么来摆脱这个问题吗 我在这些行中遇到了错误 nodeListStep=elementLeg.getElementsByTagName(“步骤”) 及 解码多段线(elementStep.getElementsByTagName(“点”).item(0.getTextContent()) 我试着做这个例子 这是我的RotaT
public class RotaTask extends AsyncTask<Void, Integer, Boolean> {
private static final String TOAST_MSG = "Calculating";
private static final String TOAST_ERR_MAJ = "Impossible to trace Itinerary";
private Context context; private GoogleMap gMap;
private String editFrom; private String editTo;
private final ArrayList<LatLng> lstLatLng = new ArrayList<LatLng>();
public RotaTask(final Context context, final GoogleMap gMap, final String editFrom, final String editTo) {
this.context = context;
this.gMap= gMap;
this.editFrom = editFrom;
this.editTo = editTo;
}
/** * {@inheritDoc} */
@Override protected void onPreExecute() {
Toast.makeText(context, TOAST_MSG, Toast.LENGTH_LONG).show();
}
/*** * {@inheritDoc} */
@Override protected Boolean doInBackground(Void... params) {
try {
final StringBuilder url = new StringBuilder("http://maps.googleapis.com/maps/api/directions/xml?sensor=false&language=pt"); url.append("&origin="); url.append(editFrom.replace(' ', '+')); url.append("&destination=");
url.append(editTo.replace(' ', '+'));
final InputStream stream = new URL(url.toString()).openStream();
final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setIgnoringComments(true);
final DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
final Document document = documentBuilder.parse(stream);
document.getDocumentElement().normalize();
final String status = document.getElementsByTagName("status").item(0).getTextContent();
if(!"OK".equals(status)) {
return false;
}
final Element elementLeg = (Element) document.getElementsByTagName("leg").item(0);
final NodeList nodeListStep;
nodeListStep = elementLeg.getElementsByTagName("step");
final int length = nodeListStep.getLength();
for(int i=0; i<length; i++) {
final Node nodeStep = nodeListStep.item(i);
if(nodeStep.getNodeType() == Node.ELEMENT_NODE) {
final Element elementStep = (Element) nodeStep;
decodePolylines(elementStep.getElementByTagName("points").item(0).getTextContent());
}
}
return true;
}
catch(final Exception e) {
return false;
}
}
private void decodePolylines(final String encodedPoints) {
int index = 0;
int lat = 0, lng = 0;
while (index < encodedPoints.length()) {
int b, shift = 0, result = 0;
do {
b = encodedPoints.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5;
}
while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat; shift = 0; result = 0;
do {
b = encodedPoints.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5; } while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng; lstLatLng.add(new LatLng((double)lat/1E5, (double)lng/1E5));
}
}
/** * {@inheritDoc} */
@Override
protected void onPostExecute(final Boolean result) {
if(!result) {
Toast.makeText(context, TOAST_ERR_MAJ, Toast.LENGTH_SHORT).show();
}
else {
final PolylineOptions polylines = new PolylineOptions();
polylines.color(Color.BLUE);
for(final LatLng latLng : lstLatLng) {
polylines.add(latLng);
}
final MarkerOptions markerA = new MarkerOptions();
markerA.position(lstLatLng.get(0));
markerA.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
final MarkerOptions markerB = new MarkerOptions();
markerB.position(lstLatLng.get(lstLatLng.size()-1));
markerB.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(lstLatLng.get(0), 10)); gMap.addMarker(markerA);
gMap.addPolyline(polylines); gMap.addMarker(markerB);
}
}
}
public类RotaTask扩展异步任务{
私有静态最终字符串TOAST_MSG=“computing”;
私有静态最终字符串TOAST_ERR_MAJ=“无法跟踪行程”;
私有上下文;私有谷歌地图gMap;
私有字符串editFrom;私有字符串editTo;
private final ArrayList lstLatLng=新的ArrayList();
公共任务(最终上下文上下文、最终GoogleMap gMap、最终字符串editFrom、最终字符串editTo){
this.context=上下文;
这个.gMap=gMap;
this.editFrom=editFrom;
this.editTo=editTo;
}
/***{@inheritDoc}*/
@重写受保护的void onPreExecute(){
Toast.makeText(上下文,Toast_MSG,Toast.LENGTH_LONG).show();
}
/****{@inheritDoc}*/
@覆盖受保护的布尔doInBackground(Void…params){
试一试{
最终StringBuilder url=新StringBuilder(“http://maps.googleapis.com/maps/api/directions/xml?sensor=false&language=pt“”;url.append(&origin=“);url.append(editFrom.replace(“”,“+”);url.append(&destination=“);
append(editTo.replace(''+');
final InputStream stream=新URL(URL.toString()).openStream();
final DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
documentBuilderFactory.setIgnoringComments(true);
final DocumentBuilder DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
最终文档=documentBuilder.parse(流);
document.getDocumentElement().normalize();
最终字符串状态=document.getElementsByTagName(“状态”).item(0.getTextContent();
如果(!“确定”。等于(状态)){
返回false;
}
最终元素elementLeg=(元素)document.getElementsByTagName(“leg”)。项(0);
最终节点列表节点列表步骤;
nodeListStep=elementLeg.getElementsByTagName(“步骤”);
final int length=nodeListStep.getLength();
对于(inti=0;i>1):(结果>>1));
lat+=dlat;shift=0;结果=0;
做{
b=encodedPoints.charAt(index++)-63;
结果|=(b&0x1f)=0x20);
int-dlng=((结果&1)!=0?~(结果>>1):(结果>>1));
lng+=dlng;lstLatLng.add(新LatLng((双)lat/1E5,(双)lng/1E5));
}
}
/***{@inheritDoc}*/
@凌驾
受保护的void onPostExecute(最终布尔结果){
如果(!结果){
Toast.makeText(上下文,Toast\u ERR\u MAJ,Toast.LENGTH\u SHORT).show();
}
否则{
最终多段线选项多段线=新的多段线选项();
多段线。颜色(颜色。蓝色);
用于(最终车床:lstLatLng){
多段线。添加(板条);
}
最终MarkerOptions markerA=新MarkerOptions();
markerA.position(lstLatLng.get(0));
图标(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
最终标记选项markerB=新标记选项();
markerB.position(lstLatLng.get(lstLatLng.size()-1));
图标(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_-RED));
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(lstLatLng.get(0),10));gMap.addMarker(markerA);
gMap.addPolyline(多段线);gMap.addMarker(markerB);
}
}
}
这是acitiy_main.xml
<
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:orientation="horizontal" >
<TextView
android:text="From"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textStyle="bold" />
<EditText
android:id="@+id/editFrom"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:inputType="text"
android:lines="1"
android:maxLines="1" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="0dp"
android:layout_weight="3" android:orientation="horizontal" >
<TextView
android:text="To"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textStyle="bold" />
<EditText
android:id="@+id/editTo"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:inputType="text"
android:lines="1"
android:maxLines="1" />
</LinearLayout>
<Button
android:id="@+id/btnGo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Go" />
</LinearLayout>
<
您这里有一个打字错误
应该是,
getElementsByTagName()
而不是
getElementByTagName()
根据
getElementsByTagName()方法返回一个活动的
HTMLCollection具有给定标记名的元素
我为necro感到抱歉,但是,我只是在帮助某人时遇到了这个问题,希望如果其他人发现了,这将在将来有所帮助 确保导入了正确的元素类(从org.w3c.dom)
这是一个如此简单的问题,已经很久没有解决了。请告诉我们您做了什么。@Lal我试图在这里发布我的代码,但仍在努力验证doLal的答案是否正确。您应该接受it@metalurgus这是code@KalpaDilshan这里仍然有一个输入错误:if(nodeStep.getNodeType()==Node.ELEMENT\u Node){final Element elementStep=(Element)nodeStep;decodePolylines(elementStep.getElementByTagName(“points”).item(0.getTextContent());}我一直在android studio中尝试这样做。我遇到了一个类似这样的错误OK,您是否按照我在回答中所说的进行了更正?这是输入错误Lal,对不起。在我的代码中是getElementsByTagName()哦..现在实际上是什么错误?你能发布日志吗?我无法运行它!在运行它之前,代码中有一个错误,说无法解析方法getElementsByTagName(java.lang.String)