Android XmlPullParser获取null而不是START_标记

Android XmlPullParser获取null而不是START_标记,android,eclipse,xmlpullparser,Android,Eclipse,Xmlpullparser,我试图解析一个XML文件,但我对文档有问题 我对这一行有异议: parser.require(XmlPullParser.START_TAG, ns, "CarStatus"); 但是,我得到的是null而不是START_标记 XML HTTP POST响应: 06-20 15:15:40.804: I/RESPONSE(2270): <?xml version="1.0" encoding="utf-8"?> 06-20 15:15:40.804: I/RESPONSE(2270

我试图解析一个XML文件,但我对文档有问题

我对这一行有异议:

parser.require(XmlPullParser.START_TAG, ns, "CarStatus");
但是,我得到的是null而不是START_标记

XML HTTP POST响应:

06-20 15:15:40.804: I/RESPONSE(2270): <?xml version="1.0" encoding="utf-8"?>
06-20 15:15:40.804: I/RESPONSE(2270): <CarObject>
06-20 15:15:40.804: I/RESPONSE(2270):   <ResultCode>0</ResultCode>
06-20 15:15:40.804: I/RESPONSE(2270):   <ResultMessage>success</ResultMessage>
06-20 15:15:40.804: I/RESPONSE(2270):   <Cardata xsi:type="ArrayOfCarStatus">
06-20 15:15:40.804: I/RESPONSE(2270):     <CarStatus> 
06-20 15:15:40.804: I/RESPONSE(2270):       <CarID>241</CarID>
06-20 15:15:40.804: I/RESPONSE(2270):       <CarName>ASC</CarName>
06-20 15:15:40.804: I/RESPONSE(2270):     </CarStatus>
06-20 15:15:40.804: I/RESPONSE(2270):   </CarData>
06-20 15:15:40.804: I/RESPONSE(2270): </CarObject>
06-20 15:15:40.804:I/响应(2270):
06-20 15:15:40.804:I/响应(2270):
06-20 15:15:40.804:I/响应(2270):0
06-20 15:15:40.804:I/回复(2270):成功
06-20 15:15:40.804:I/响应(2270):
06-20 15:15:40.804:I/响应(2270):
06-20 15:15:40.804:I/应答(2270):241
06-20 15:15:40.804:I/应答(2270):ASC
06-20 15:15:40.804:I/响应(2270):
06-20 15:15:40.804:I/响应(2270):
06-20 15:15:40.804:I/响应(2270):
这是我遇到问题的代码

private CarStatus readCarStatus(XmlPullParser parser)
            throws XmlPullParserException, IOException {

        parser.require(XmlPullParser.START_TAG, ns, "CarStatus");
        String carId = null;
        String carName = null;

        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }

            String name = parser.getName();
            if (name.equals("CarID")) {
                carId = readCarId(parser);
            } else if (name.equals("CarName")) {
                carName = readCarName(parser);
            } else {
                skip(parser);
            }
        }
        return new CarStatus(carId, carName);
    }

06-20 16:56:15.773: W/System.err(4017): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}CarStatus (position:START_TAG <ResultObject >@2:146 in java.io.InputStreamReader@415f04d8) 
06-20 16:56:15.773: W/System.err(4017):     at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
06-20 16:56:15.773: W/System.err(4017):     at com.bentseytlin.maps.MainActivity.readCarStatus(MainActivity.java:174)
06-20 16:56:15.773: W/System.err(4017):     at com.bentseytlin.maps.MainActivity.parse(MainActivity.java:143)
06-20 16:56:15.773: W/System.err(4017):     at com.bentseytlin.maps.MainActivity.onCreate(MainActivity.java:88)
06-20 16:56:15.773: W/System.err(4017):     at android.app.Activity.performCreate(Activity.java:5104)
06-20 16:56:15.780: W/System.err(4017):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.access$700(ActivityThread.java:141)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240)
06-20 16:56:15.780: W/System.err(4017):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 16:56:15.780: W/System.err(4017):     at android.os.Looper.loop(Looper.java:137)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.main(ActivityThread.java:5041)
06-20 16:56:15.780: W/System.err(4017):     at java.lang.reflect.Method.invokeNative(Native Method)
06-20 16:56:15.780: W/System.err(4017):     at java.lang.reflect.Method.invoke(Method.java:511)
06-20 16:56:15.780: W/System.err(4017):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-20 16:56:15.780: W/System.err(4017):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-20 16:56:15.780: W/System.err(4017):     at dalvik.system.NativeStart.main(Native Method)
private CarStatus readCarStatus(XmlPullParser)
引发XmlPullParserException,IOException{
require(XmlPullParser.START_标记,ns,“CarStatus”);
字符串carId=null;
字符串carName=null;
while(parser.next()!=XmlPullParser.END_标记){
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String name=parser.getName();
如果(名称等于(“CarID”)){
carId=readCarId(解析器);
}如果(name.equals(“CarName”)){
carName=readCarName(解析器);
}否则{
跳过(解析器);
}
}
返回新的CarStatus(carId、carName);
}
06-20 16:56:15.773:W/System.err(4017):org.xmlpull.v1.XmlPullParserException:预期:START_TAG{null}CarStatus(在java.io中的位置:START_TAG@2:146)。InputStreamReader@415f04d8) 
06-20 16:56:15.773:W/System.err(4017):位于org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
06-20 16:56:15.773:W/System.err(4017):位于com.bentseytlin.maps.MainActivity.readCarStatus(MainActivity.java:174)
06-20 16:56:15.773:W/System.err(4017):位于com.bentseytlin.maps.MainActivity.parse(MainActivity.java:143)
06-20 16:56:15.773:W/System.err(4017):位于com.bentseytlin.maps.MainActivity.onCreate(MainActivity.java:88)
06-20 16:56:15.773:W/System.err(4017):位于android.app.Activity.performCreate(Activity.java:5104)
06-20 16:56:15.780:W/System.err(4017):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-20 16:56:15.780:W/System.err(4017):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-20 16:56:15.780:W/System.err(4017):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-20 16:56:15.780:W/System.err(4017):在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692)
06-20 16:56:15.780:W/System.err(4017):在android.app.ActivityThread.access$700(ActivityThread.java:141)
06-20 16:56:15.780:W/System.err(4017):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240)
06-20 16:56:15.780:W/System.err(4017):位于android.os.Handler.dispatchMessage(Handler.java:99)
06-20 16:56:15.780:W/System.err(4017):位于android.os.Looper.loop(Looper.java:137)
06-20 16:56:15.780:W/System.err(4017):位于android.app.ActivityThread.main(ActivityThread.java:5041)
06-20 16:56:15.780:W/System.err(4017):位于java.lang.reflect.Method.invokenactive(本机方法)
06-20 16:56:15.780:W/System.err(4017):位于java.lang.reflect.Method.invoke(Method.java:511)
06-20 16:56:15.780:W/System.err(4017):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-20 16:56:15.780:W/System.err(4017):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-20 16:56:15.780:W/System.err(4017):在dalvik.System.NativeStart.main(本机方法)

谢谢你的帮助

我认为您使用的
require
不正确。我感觉您希望它告诉您
开始标记
何时等于
。但是在每次失败的检查中,require方法都会抛出一个异常,这意味着您必须添加一个try-catch块,循环会有点奇怪。有关更多信息,请参阅


我个人不会使用Require,而是像我在上面的评论()中写的那样。不过,我必须承认,我已经很久没有这样做了。:-)

“汽车”在“”之后做什么?我认为您的XML输入不正确。对不起,我不知道这是怎么回事。XML文件绝对不是问题所在!也许你可以跳过require调用,像在线程中一样执行它?