Android 无法解析方法getElementsByTagName

Android 无法解析方法getElementsByTagName,android,google-maps,Android,Google Maps,我一直在尝试在android中绘制一条到给定点的路径。但是我收到一个错误,说无法解析方法getElementsByTagName(java.lang.String)我能做些什么来摆脱这个问题吗 我在这些行中遇到了错误 nodeListStep=elementLeg.getElementsByTagName(“步骤”) 及 解码多段线(elementStep.getElementsByTagName(“点”).item(0.getTextContent()) 我试着做这个例子 这是我的RotaT

我一直在尝试在android中绘制一条到给定点的路径。但是我收到一个错误,说无法解析方法getElementsByTagName(java.lang.String)我能做些什么来摆脱这个问题吗

我在这些行中遇到了错误

nodeListStep=elementLeg.getElementsByTagName(“步骤”)

解码多段线(elementStep.getElementsByTagName(“点”).item(0.getTextContent())

我试着做这个例子

这是我的RotaTask.java

    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)