Я заставил его работать с этим парсером -
public class XmlPullFeedParser extends BaseFeedParser {
public XmlPullFeedParser(String feedUrl) {
super(feedUrl);
}
StringBuilder builder = new StringBuilder();
int whichItemFlag = 0;
Context thisContext;
DataBaseHelper myDB;
public void parse(InputStream is, Context context, String insertInto) {
XmlPullParser parser = Xml.newPullParser();
thisContext = context;
myDB = new DataBaseHelper(thisContext);
try {
// auto-detect the encoding from the stream
parser.setInput(is, "UTF-8");
int eventType = parser.getEventType();
boolean done = false;
while (eventType != XmlPullParser.END_DOCUMENT && !done) {
String name = null;
String attr = null;
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
name = parser.getName();
attr = parser.getAttributeName(0);
if (name.equalsIgnoreCase(ITEM)) {
if(attr!=null) {
builder.append("(");
}
whichItemFlag++;
} else if (name.equalsIgnoreCase(VALUE)) {
builder.append("'"+parser.nextText().replaceAll("'", "'")+"',");
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase(ITEM)) {
whichItemFlag--;
if(whichItemFlag==0) {
builder.delete(builder.length()-1, builder.length());
builder.append(")");
writeStringToDb(insertInto, builder.toString());
builder.delete(0, builder.length());
}
}
break;
}
eventType = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
// throw new RuntimeException(e);
} finally {
myDB.close();
}
}
private void writeStringToDb(String insertInto, String string) {
SQLiteDatabase db = myDB.getWritableDatabase();
String sql = insertInto + string;
db.execSQL(sql);
db.close();
}
Stringbuilder, который я использовал для создания строки из значений, возвращаемых XML, и использования этой строки непосредственно для записи в базу данных. Метод parse принимает входной поток, контекст приложения и строку, которая помогает мне построить оператор sql. С самого парсера я пишу напрямую в базу данных. Поскольку XML был очень большим (7 МБ), я должен был сделать это таким образом, иначе моему устройству Android не хватило бы памяти при создании более 1500 объектов.