Попробуйте прочитать реальный входной поток напрямую. Это позволит вам использовать XMLPullParser , что означает, что вам не нужно будет хранить весь XML-файл в памяти, пока вы его анализируете. Синтаксический анализ Pull выполняется путем синтаксического анализа элемента, как только вы его получите, и полагается на состояние (например, анализатор SAX), чтобы отслеживать, где вы находитесь. Это необходимая концепция, которая позволяет вам думать о своем XML-файле как о поступающем потоке XML-тегов.
Вы бы хотели сделать что-то вроде следующего:
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(new InputStreamReader(in));
XmlUtils.beginDocument(parser,"results");
int eventType = parser.getEventType();
do{
XmlUtils.nextElement(parser);
parser.next();
eventType = parser.getEventType();
if(eventType == XmlPullParser.TEXT){
Log.d("test",parser.getText());
}
//...Handle other types of events...
} while (eventType != XmlPullParser.END_DOCUMENT) ;
}
finally {
urlConnection.disconnect();
}
Я собрал этот пример вместе с этого урока и этой документацией . Я на самом деле не пробовал, чтобы увидеть, работает ли он, хотя.