我有需求,我需要从服务器获取xml,如果它存在,并且如果不从assets文件夹中取出该文件。
xml我使用inputstream将其作为StringReader的参数传递以进行进一步处理。我正在使用XmlPullParser进行解析。
但是我无法将输入源参数传递给stringreader以进行进一步的解析。我不想使用文档阅读器。请找到如下代码。
private void readSynconfiguration( )
{
XmlParser xmlparser = new XmlParser();
try {
String strFromMbo = getDataFromMBO();
if(strFromMbo != null && !strFromMbo.isEmpty()) { // first
InputSource is = new InputSource(new StringReader(strFromMbo));
// result = getStringFromInputStream(is);
}
else {
context = RetailExecutionApplication.getApp().getApplicationContext();
InputStream stream = context.getAssets().open("syncSettings.xml");
result = getStringFromInputStream(stream);
}
} catch (IOException e) {
syncSetting = false;
e.printStackTrace();
}
StringReader labelReader = new StringReader(result);
try {
if(syncSetting) {
labelSharedInstance.clear();
labelSyncDetails = xmlparser.LabelsParse(labelReader);
labelSharedInstance = labelSyncDetails;
}
} catch (XmlPullParserException e) {
syncSetting = false;
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
请在这方面帮助我。
答案 0 :(得分:2)
You can not pass inputsorce object directly to StringReader. First of all you convert inputsorce to reader as follows :
Reader reader = yourInputSource.getCharacterStream();
String result = reader.toString();
StringReader labelReader = new StringReader(result);
答案 1 :(得分:1)
我觉得你很困惑。 XmlPullParser.setInput()方法需要Reader
,这就是您需要提供的内容。
在案例1中(来自数据库),您在strFromMbo
中有一个字符串,所以只需用StringReader
换行。
在案例2(来自档案)中,您有两种选择:
FileReader
。使用较少的内存。在这两种情况下,请记得关闭资源。
我不明白“输入源”与任何事情有什么关系。
String xml = getDataFromMBO();
if (xml == null || xml.isEmpty()) {
context = RetailExecutionApplication.getApp().getApplicationContext();
try (InputStream stream = context.getAssets().open("syncSettings.xml")) {
xml = getStringFromInputStream(stream);
} catch (IOException e) {
syncSetting = false;
e.printStackTrace();
}
}
if (syncSetting) {
try {
labelSharedInstance.clear();
labelSyncDetails = new XmlParser().LabelsParse(new StringReader(xml));
labelSharedInstance = labelSyncDetails;
} catch (XmlPullParserException e) {
syncSetting = false;
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}