Я получаю ошибку:
precondition: START_TAG (position:END_TAG </GUID>@4:54 in java.io.InputStreamReader@358d99b)
Я довольно долго пытался понять, что не так. Сначала я подумал, что это проблема с буквами верхнего и нижнего регистра, но я думаю, что исправил это с помощью метода equalsIgnoreCase. Я попытался посмотреть в Интернете, но не смог найти ничего, что помогло бы мне решить эту проблему.
Это моя основная деятельность:
package com.example.retar.xmlparsertest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("čič", "on start");
parseXML();
Log.i("čič", "konec prasexml");
}
private void parseXML(){
Log.i("čič", "začetek parsexml");
XmlPullParserFactory parserFactory;
try {
parserFactory = XmlPullParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
XmlPullParser parser = parserFactory.newPullParser();
InputStream inputStream = getAssets().open("mix_stations.xml");
parser.setInput(inputStream, null);
processParsing(parser);
}catch (XmlPullParserException e){
Log.i("čič", e.getMessage());
}catch (IOException e){
Log.i("čič", e.getMessage());
}
}
private void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException{
Log.i("čič", "začetek procesparsing");
ArrayList<Dispenser> mDispensers = new ArrayList<>();
int eventType = parser.getEventType();
Dispenser currentDispenser = null;
int i = 0;
while (eventType != XmlPullParser.END_DOCUMENT){
String eltName;
switch (eventType){
case XmlPullParser.START_TAG:
eltName = parser.getName();
if("Table1".equalsIgnoreCase(eltName)) {
i++;
Log.i("čič", Integer.toString(i));
currentDispenser = new Dispenser();
mDispensers.add(currentDispenser);
}else if (currentDispenser != null){
if("GUID".equalsIgnoreCase(eltName)){
Log.i("GUID", eltName);
currentDispenser.setGuid(parser.nextText());
Log.i("čič2", "boys i did something");
}if("Code".equalsIgnoreCase(eltName)){
currentDispenser.setCode(parser.getText());
}if("DispenserCommercialCode".equalsIgnoreCase(eltName)){
currentDispenser.setDispenserCommercialCode(parser.getText());
}if("M2MBoxSerialNumber".equalsIgnoreCase(eltName)){
currentDispenser.setM2MBoxSerialNumber(parser.getText());
}if("MonitorSerialNumber".equalsIgnoreCase(parser.nextText())){
currentDispenser.setMonitorSerialNumber(parser.getText());
}if("PrinterSerialNumber".equalsIgnoreCase(eltName)){
currentDispenser.setPrinterSerialNumberString(parser.getText());
}if("AccountName".equalsIgnoreCase(eltName)){
currentDispenser.setAccountName(parser.getText());
}
}
break;
}
eventType = parser.next();
}
}
}
Класс моих дозаторов:
package com.example.retar.xmlparsertest;
public class Dispenser {
private String mGuid;
private String mCode;
private String mDispenserCommercialCode;
private String mM2MBoxSerialNumber;
private String mMonitorSerialNumber;
private String mPrinterSerialNumberString;
private String mAccountName;
public String getGuid() {
return mGuid;
}
public void setGuid(String guid) {
mGuid = guid;
}
public String getCode() {
return mCode;
}
public void setCode(String code) {
mCode = code;
}
public String getDispenserCommercialCode() {
return mDispenserCommercialCode;
}
public void setDispenserCommercialCode(String dispenserCommercialCode) {
mDispenserCommercialCode = dispenserCommercialCode;
}
public String getM2MBoxSerialNumber() {
return mM2MBoxSerialNumber;
}
public void setM2MBoxSerialNumber(String m2MBoxSerialNumber) {
mM2MBoxSerialNumber = m2MBoxSerialNumber;
}
public String getMonitorSerialNumber() {
return mMonitorSerialNumber;
}
public void setMonitorSerialNumber(String monitorSerialNumber) {
mMonitorSerialNumber = monitorSerialNumber;
}
public String getPrinterSerialNumberString() {
return mPrinterSerialNumberString;
}
public void setPrinterSerialNumberString(String printerSerialNumberString) {
mPrinterSerialNumberString = printerSerialNumberString;
}
public String getAccountName() {
return mAccountName;
}
public void setAccountName(String accountName) {
mAccountName = accountName;
}
}
Пример из файла XML:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Table1>
<GUID>88b008cb-0bb9-e511-8137-78acc0f7ecd6</GUID>
<Code>XXX_XXX_XXX_01</Code>
<DispenserSerialNumber>111111111-111111</DispenserSerialNumber>
<DispenserCommercialCode>BARBIL HA400-16 (2008)</DispenserCommercialCode>
<SerialNumber>CZ1111114</SerialNumber>
<Name>XXX - CZC8395XJ4</Name>
<M2MBoxSerialNumber>862570023687691</M2MBoxSerialNumber>
<Name1>XXX - 862570023687691</Name1>
<MonitorSerialNumber>FVL111116146</MonitorSerialNumber>
<Name2>XXX - FVLDCH111116</Name2>
<PrinterSerialNumber>2011111A</PrinterSerialNumber>
<Name3>XXX - 2011111A</Name3>
<ShakerSerialNumber>450000000-834033</ShakerSerialNumber>
<Name4>XXX - 110000000-111111</Name4>
<AccountName>Farbenpartner Graz</AccountName>
</Table1>
</NewDataSet>