Мне не удается заставить работать мое приложение, когда я переключаюсь на ASP.Net Web API.Все отлично работает, когда я использую простой ответ страницы в качестве моего XML с сервера.Я подозреваю, что это первая строка в XML, возвращенная "ArrayOf".StartDocument срабатывает, но startElement никогда не срабатывает.Когда я пытаюсь просмотреть XML, возвращенный в Android, он просто выдает «true», а не то, что возвращает сервер.Я не знаю, почему он не будет читать XML сейчас.Буду признателен за любую информацию или помощь.
Я повсюду смотрел, как удалить тег ArrayOf и создал пользовательские средства форматирования XML.В итоге я получил тот же результат.Я пробовал DataContracts, а также пользовательские форматеры XML.Хотя они, кажется, удаляют пространство имен, они никогда не удаляли раздражающий тег «ArrayOf».В любом случае я решил пойти дальше и просто поработать с ним, но проблема все еще описана выше.
Мой XML, созданный сервером:
<ArrayOfStartupCheck xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<StartupCheck>
<AndroidCurrentVersion>2.2</AndroidCurrentVersion>
<AndroidReleaseDate>3/17/2019 12:00:00 AM</AndroidReleaseDate>
<AndroidReleaseNotes>Bug Updates</AndroidReleaseNotes>
<iPhoneCurrentVersion>1.0</iPhoneCurrentVersion>
<iPhoneReleaseDate>6/16/2017 12:00:00 AM</iPhoneReleaseDate>
<iPhoneReleaseNotes>Bug Updates</iPhoneReleaseNotes>
</StartupCheck>
</ArrayOfStartupCheck>
Я использую DefaultHandler для SaxParsing.
Просто начало моего кода Sax Handler, поскольку Stack заявляет, что не должен публиковать весь файл:
private boolean in_androidcurrentversion = false;
private boolean in_androidreleasedate = false;
private boolean in_androidreleasenotes = false;
StringBuilder textContent = new StringBuilder();
private ParsedDataSet myParsedExampleDataSet = new ParsedDataSet();
// ===========================================================
// Getter & Setter
// ===========================================================
public ParsedDataSet getParsedData() {
return this.myParsedExampleDataSet;
}
// ===========================================================
// Methods
// ===========================================================
@Override
public void startDocument() throws SAXException {
this.myParsedExampleDataSet = new ParsedDataSet();
}
@Override
public void endDocument() throws SAXException {
// Nothing to do
}
@Override
public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes atts) throws SAXException {
super.startElement(uri, localName, qName, atts);
if (localName.equalsIgnoreCase("androidcurrentversion")) {
textContent.delete(0, textContent.length());
this.in_androidcurrentversion = true;
}
и так далее ... Опять же, просто никогда не добирается до "startElement".Я использую тот же код с простыми публикациями страниц и возвращаю XML вручную, и все работает хорошо, только когда я использую ASP.Net WebAPI v2, я получаю эту проблему.Единственное, что я вижу по-другому, это первая строка «ArrayOf», но это все еще тег, поэтому не уверен, почему он даже не сработает.
Использование Below в качестве моего URLConnection:
String response = "false";
URL url = null;
try {
url = new URL(myURL);
HttpURLConnection urlConnection = null;
urlConnection = (HttpURLConnection) url.openConnection();
//NEW
urlConnection.setFollowRedirects(false);
urlConnection.setConnectTimeout(3000);
//NEW
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
response = result.toString();
urlConnection.disconnect();
} catch (java.net.SocketTimeoutException e) {
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
response просто "true".
Когда я читаю ответ сервера через Android, он просто возвращает "true", но не сам XML, когда я использую Postman или URL-адрес напрямую, XML в порядке, как показано выше.Просто для дальнейшего понимания, я использую Async в своем API, с которым у меня никогда раньше не было проблем, но это было единственное другое изменение по сравнению с предыдущим.Заранее благодарим за понимание.