Просто чтобы вывести это в открытую, я новичок в JAVA, KSOAP и JSON. Поэтому я постараюсь объяснить это как можно лучше.
Некоторое время назад я создал веб-сервис для использования приложениями Blackberry, которые мы создали с помощью плагина для Visual Studio. Сейчас над проектом, над которым я работаю, я хочу использовать тот же веб-сервис для устройств Android. По большей части у меня есть базовый код для приложения для Android. Вот моя проблема:
Я могу успешно позвонить в веб-службу и получить ответ. Из создания веб-сервиса я знаю, что он отправляет JSON-ответ. Моя проблема пытается разобрать ответ JSON. Я нашел несколько примеров, которые мне подходят, но я одержим одной вещью.
В JSON каждому элементу предшествует "anyType", который заставляет мой код не возвращать результатов (в конечном итоге я связываю данные с ArrayList). Вот что я получу, если получу "getProperty (0) .toString (). ..
anyType{Artist=anyType{TrackName=Champagne Supernova;};
Вот код, который я использую для анализа объекта JSON ....
SoapObject gr = (SoapObject)envelope.getResponse();
String ro = gr.getProperty(0).toString();
//Added just to see structure of response
Artist_Result.add(gr.toString());
if (ro.startsWith("{"))
{
JSONObject JSONObj = new JSONObject(ro);
Iterator<String> itr = JSONObj.keys();
while (itr.hasNext())
{
String key = (String)itr.next();
String value = JSONObj.getString(key);
//bundleResult.putString(key, value);
Artist_Result.add(value);
}
}
else if (ro.startsWith("["))
{
JSONArr = new JSONArray(ro);
for (int i = 0; i < JSONArr.length(); i++)
{
JSONObj = (JSONObject)JSONArr.get(i);
//bundleResult.putString(String.valueOf(i), JSONObj.toString());
Artist_Result.add(JSONObj.toString());
}
}
Код WebService:
[WebMethod]
[return: System.Xml.Serialization.XmlArrayItemAttribute(typeof(Artist))]
public Artist[] GetArtist(string ArtistQuery)
{
// All the SQL Stuff Here
SqlDataReader sReader;
sReader = cmd.ExecuteReader();
List<Artist> Artists = new List<Artist>();
while (sReader.Read())
{
Artist result = new Artist();
result.TrackName = sReader.GetString(0);
Artists.Add(result);
}
sReader.Close();
sqlConn.Close();
return Artists.ToArray();
}
public class Artist
{
public string TrackName;
}
Пример вывода XML из браузера:
<?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfArtist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://bb.mcrcog.com/">
- <Artist>
<TrackName>Champagne Supernova</TrackName>
</Artist>
- <Artist>
<TrackName>Don't Look Back In Anger</TrackName>
</Artist>
- <Artist>
<TrackName>D'you Know What I Mean</TrackName>
</Artist>
- <Artist>
<TrackName>Go Let It Out</TrackName>
</Artist>
У меня такое чувство, что мне нужно будет реализовать Class и Getters / Setters на стороне Android. Я просто не знаю, как это сделать. Любая помощь будет принята с благодарностью!